糗事百科爬虫案例
时间:2019-08-27
本文章向大家介绍糗事百科爬虫案例,主要包括糗事百科爬虫案例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
爬取糗事百科的热门的所有段子的作者、标题、内容链接、好笑数、评论数
# coding=utf-8 from lxml import etree import requests import json class QiubaiSpider: def __init__(self): self.url_temp="https://www.qiushibaike.com/8hr/page/{}/" self.header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"} def get_url_list(self): url_list=[self.url_temp.format(i) for i in range(1,14)] return url_list def parse_url(self,url): print("正在爬取:",url) response=requests.get(url,headers=self.header) return response.content.decode() def get_content_list(self,html_str): html=etree.HTML(html_str) #1.分组 div_list=html.xpath("//div[@class='recommend-article']//li") content_list=[] for div in div_list: item={} item["作者名"]=div.xpath(".//span[@class='recmd-name']/text()")[0] if len(div.xpath(".//span[@class='recmd-name']/text()"))>0 else None item["标题"]=div.xpath(".//a[@class='recmd-content']/text()") item["内容链接"]=div.xpath(".//a[@class='recmd-content']/@href") item["内容链接"]='https://www.qiushibaike.com'+item["内容链接"][0] if len(item["内容链接"])>0 else None item["好笑数"]=div.xpath(".//div[@class='recmd-num']/span/text()") item["好笑数"]=item["好笑数"][0] if len(item["好笑数"])>0 else None item["评论"]=div.xpath(".//div[@class='recmd-num']/span/text()")[-2] #item["评论"]=item["评论"][3] if len(item["评论"])>0 else None content_list.append(item) return content_list #b保存 def save_content(self,content_list): with open("qiubai.txt","a",encoding="utf-8") as f: for content in content_list: f.write(json.dumps(content,ensure_ascii=False)) f.write("\n") print("保存成功") def run(self): #1.根据url地址规律,构造url列表 url_list=self.get_url_list() #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(content_list) if __name__ == '__main__': qiubai=QiubaiSpider() qiubai.run()
原文地址:https://www.cnblogs.com/-chenxs/p/11419066.html
- Android查缺补漏(IPC篇)-- 进程间通讯之Socket简介及示例
- Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍
- Android查缺补漏(View篇)--布局文件中的“@+id”和“@id”有什么区别?
- Name node is in safe mode.
- Android查缺补漏(View篇)--事件分发机制源码分析
- Android查缺补漏(View篇)--事件分发机制
- Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解
- Android查缺补漏(View篇)--自定义 View 的基本流程
- CVPR2018: Unsupervised Cross-dataset Person Re-identification by Transfer Learning of Spatio-tempora
- 一个数据包消灭一台服务器的DNS漏洞
- java文件基本操作与实例
- 如何在Azkaban中安装HDFS插件以及与CDH集成
- CVE-2017-5123 漏洞利用全攻略
- sqlmap被ban了ip怎么办
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 知道吗?容器镜像也可以延迟拉取!
- ansible超详细讲解,值得收藏
- 实战渗透 - 一个怎么够?我全都要!
- 详解 Numpy 中的视图和副本
- 详解 matplotlib 中的两种标注方法
- 混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用
- 彻底搞懂闭包,柯里化,手写代码,金九银十不再丢分!
- Kubernetes控制器--副本集ReplicaSet
- Awesome Kubernetes 系列:第一期
- Mongodb多键索引之数组文档
- 在 Cocos Creator 里画个炫酷的雷达图
- 用shader做一个柿子颜色的过场动画
- mysql 找出最新时间的一条数据
- 【NPM库】- 0x05 - 文件、路径操作
- MySQL中insert阻塞问题的分析