好段子网站任意页数爬取
#使用Xpath方式爬取好段子 #http://www.haoduanzi.com/category/?1-1.html 从第二页开始1-2 1-3 import urllib.parse import urllib.request from lxml import etree import time import json #写个列表 parse_content方法中使用 item_list = [] #构建请求函数 def handle_request(url,page): #构造请求头 headers = { "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' } #注意 拼接url 新姿势 url = url % page #print(url) request = urllib.request.Request(url=url,headers=headers) return request #定义解析服务器返回内容的函数 def parse_content(content): #生成对象 tree = etree.HTML(content) #注意此处有一个重点是 # <li>标签中有不含属性的,有含属性的,要过滤不含属性的 li[not(@class)] #注意: #双斜杠//代表下面所有位置的标签 #.//代表当前块内的标签寻找 div_list = tree.xpath('//div[@class="left"]/ul[@class="list-box"]/li[not(@class)]') # print(len(div_list)) # exit() #循环li列表 for odiv in div_list: #获取标题 title = odiv.xpath('.//h2[@class="s2"]/text()') # print(title) # exit() #内容 text_lt = odiv.xpath('.//div[@class="content"]/a/p/text()') text = '\n'.join(text_lt) # print(text) # print(len(text)) # print("*"*60) # exit() item ={ '标题':title, '内容':text } #将内容写入到列表中 item_list.append(item) #主函数 def main(): start_page = int(input("请输入想要开始爬取的页数(从第2页开始):")) end_page = int(input("请输入想要结束的页数:")) url = "http://www.haoduanzi.com/category/?1-%s.html" for page in range(start_page,end_page +1): print("开始爬取第%s页"% page) #构建请求 request = handle_request(url,page) content = urllib.request.urlopen(request).read().decode() #print(content) parse_content(content) time.sleep(2) #写入到文件中 #string = json.dumps(item_list,ensure_ascii=False) #此处输出为一个大字典 with open("duanzi.html","w",encoding="utf8") as fp: fp.write(str(item_list)) print("第%s页爬取结束"% page) print("爬取任务结束.....") if __name__== '__main__': main()
作者:求知鱼
-------------------------------------------
个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
独学而无友,则孤陋而寡闻,开源、分享、白嫖!