失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Python】数据提取xpath和lxml模块(糗事百科的爬虫)

【Python】数据提取xpath和lxml模块(糗事百科的爬虫)

时间:2018-11-04 00:49:58

相关推荐

【Python】数据提取xpath和lxml模块(糗事百科的爬虫)

程序中用到的一些零碎知识点:

一、列表推导式:帮助我们快速生成一堆数据的列表

1、format:字符串格式化的一种方式

>>> ["10月{}日".format(i) for i in range(1,10)]

['10月1日', '10月2日', '10月3日', '10月4日', '10月5日', '10月6日', '10月7日', '10月8日', '10月9日']

二、字典推导式:帮助我们快速生成一堆数据的字典

>>> {i+10:i for i in range(10)}

{10: 0, 11: 1, 12: 2, 13: 3, 14: 4, 15: 5, 16: 6, 17: 7, 18: 8, 19: 9}

>>> {"a{}".format(i):10 for i in range(10)}

{'a0': 10, 'a1': 10, 'a2': 10, 'a3': 10, 'a4': 10, 'a5': 10, 'a6': 10, 'a7': 10, 'a8': 10, 'a9': 10}

三、三元运算符

a=10 if 3>4 else 20 #a=20

a=10 if 3<4 else 20 #a=10

代码如下:

import requestsfrom lxml import etreeimport jsonclass Qiushibaike():def __init__(self):self.url = "/8hr/page/{}/"self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"}def parse_url(self,url):print("now:",url)response =requests.get(url,headers = self.headers)return response.content.decode()def get_content_list(self,html_str):html = etree.HTML(html_str)div_list = html.xpath("//div[@id='content-left']/div")content_list=[]for div in div_list:item={}item["username"]=div.xpath(".//div[@class='author clearfix']//h2/text()")[0].strip() if len(div.xpath(".//div[@class='author clearfix']//h2/text()"))>0 else Noneitem["age"]=div.xpath(".//div[@class='author clearfix']//div/text()")item["content"]=div.xpath(".//div[@class='content']/span/text()")item["stats_vote"]=div.xpath(".//span[@class='stats-vote']/i/text()")item["stats_vote"]=item["stats_vote"][0] if len(item["stats_vote"])>0 else Noneitem["stats_commments"]=div.xpath(".//span[@class='stats-comments']//i/text()")item["stats_commments"]=item["stats_commments"][0] if len(item["stats_commments"])>0 else Noneitem["img"]=div.xpath(".//div[@class='thumb']//img/@src")item["img"]="https:"+item["img"][0] if len(item["img"])>0 else Nonecontent_list.append(item)return content_listdef save_content_list(self,content_list):with open("糗事百科.txt","a",encoding="utf-8") as f:for content in content_list:f.write(json.dumps(content,ensure_ascii=False,indent=2))f.write("\n")print("保存成功")def run(self):#1.根据url地址的规律构造url_listurl_list = [self.url.format(i) for i in range(1,14)]#2.发送请求,获取响应for url in url_list:html_str = self.parse_url(url)#3.提取数据content_list = self.get_content_list(html_str)#4.保存self.save_content_list(content_list)if __name__ == '__main__':qiushi = Qiushibaike()qiushi.run()

如果觉得《【Python】数据提取xpath和lxml模块(糗事百科的爬虫)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。