俗话说,上班时间是公司的,下班了时间才是自己的。搞点事情,写个爬虫程序,每天定期爬取点段子,看着自己爬的段子,也是一种乐趣。
二、Python爬取嗅事百科段子
1.确定爬取的目标网页
首先我们要明确目标,本次爬取的是糗事百科文字模块的段子。
(糗事百科)->分析目标(策略:url格式(范围)、数据格式、网页编码)->编写代码->执行爬虫
2.分析爬取的目标网页
段子链接:https://www.qiushibaike.com/text/
访问链接可以看到如下的页面,一个红框代表一个段子内容,也就是对应html源码的一个div浮层。页面布局采用分页的方式,每页显示25条,总共13页。点击页码或者"下一页"会跳转到相应页面。Chrome浏览器F12可以看到,每页内容都是同步加载的,而且请求次数较多,显然不能采用直接模拟请求的方式,这里采用的爬取策略是Python Selenium,每获取和解析完一页的段子,点击 "下一页" 跳转到对应页码页继续解析,直至解析并记录所有的段子。
Chrome F12查看Network模块,看到请求密密麻麻的,下载各种document、script js脚本、stylesheet样式,图片jpeg、png等。
有个情况需要注意,当一个段子内容字数太多,会被截断,出现省略号“...”和"查看全文"的跳转链接,为了获取完整的段子信息,需要增加多一个步骤,请求段子的链接,再截取里面的全部内容。
3.编写代码
下载网页内容,我使用python requests第三方库,发起GET请求方式。
1 def do_get_request(self, url, headers=None, timeout=3, is_return_text=True, num_retries=2): 2 if url is None: 3 return None 4 print('Downloading:', url) 5 if headers is None: # 默认请求头 6 headers = { 7 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'} 8 response = None 9 try: 10 response = requests.get(url, headers=headers, timeout=timeout) 11 12 response.raise_for_status() # a 4XX client error or 5XX server error response,raise requests.exceptions.HTTPError 13 if response.status_code == requests.codes.ok: 14 if is_return_text: 15 html = response.text 16 else: 17 html = response.json() 18 else: 19 html = None 20 except requests.Timeout as err: 21 print('Downloading Timeout:', err.args) 22 html = None 23 except requests.HTTPError as err: 24 print('Downloading HTTP Error,msg:{0}'.format(err.args)) 25 html = None 26 if num_retries > 0: 27 if 500 <= response.status_code < 600: 28 return self.do_get_request(url, headers=headers, num_retries=num_retries - 1) # 服务器错误,导致请求失败,默认重试2次 29 except requests.ConnectionError as err: 30 print('Downloading Connection Error:', err.args) 31 html = None 32 33 return html
View Code
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫实战三之爬取嗅事百科段子 - Python技术站