Python爬虫_糗事百科
本爬虫任务:
爬虫糗事百科网站(https://www.qiushibaike.com/)——段子版块中所有的【段子】、【投票数】、【神回复】等内容
步骤:
- 通过翻页寻找url规律,构造url列表
- 查看审查元素,发现网页内容均在elements中,可以直接请求
- 通过xpath提取需要的内容
- 保存数据
逻辑:
- 构造外层url列表并进行遍历
- 对外层url请求访问,获得响应
- 提取内层url列表
- 遍历内层url
- 对内层url请求访问,获取响应
- 提取需要的数据(段子、投票数、神回复)
- 保存
代码:
1 import requests
2 from lxml import etree
3 import json
4
5
6 class QiuShiSpider:
7 def __init__(self):
8 self.start_url = "https://www.qiushibaike.com/text/page/{}/"
9 self.headers = {
10 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.k36 (KHTML, like Gecko) ""Chrome/86.0.4240.11"}
11
12 def parse_url(self, url):
13 res = requests.get(url, headers=self.headers)
14 return res.content.decode()
15
16 def get_urls_inner(self, html_str):
17 html = etree.HTML(html_str)
18 urls_inner = html.xpath("//a[@class='contentHerf']/@href")
19 full_urls_inner = ["https://www.qiushibaike.com" + i for i in urls_inner]
20 return full_urls_inner
21
22 def get_contents(self, html_str):
23 html = etree.HTML(html_str)
24 text_list = html.xpath("//div[@class='content']/text()")
25 text = "".join(text_list)
26 number = html.xpath("//span[@class='stats-vote']/i/text()")[0] if len(
27 html.xpath("//span[@class='stats-vote']/i/text()")) > 0 else None
28 main_text_list = html.xpath("//div/span[@class='body']/text()")
29 return text, number, main_text_list
30
31 def save(self, content_dic):
32 with open("qs4.txt", "a", encoding="utf-8") as f:
33 f.write(json.dumps(content_dic, ensure_ascii=False, indent=2))
34
35 def run(self):
36 # 遍历url发送请求获取响应
37 urls_outer = [self.start_url.format(n + 1) for n in range(13)]
38 for url_outer in urls_outer:
39 try:
40 html_str = self.parse_url(url_outer)
41 urls_inner = self.get_urls_inner(html_str)
42 for url_inner in urls_inner:
43 content_dic = {}
44 html_str = self.parse_url(url_inner)
45 text, number, main_text_list = self.get_contents(html_str)
46 content_dic["text"] = text
47 content_dic["number"] = number
48 content_dic["main_text"] = main_text_list
49
50 self.save(content_dic)
51 print("第{}页,第{}条".format(urls_outer.index(url_outer), urls_inner.index(url_inner)))
52 except Exception as e:
53 print(e)
54
55
56 if __name__ == "__main__":
57 qs = QiuShiSpider()
58 qs.run()

Python爬虫_糗事百科的更多相关文章
- 爬虫_糗事百科(scrapy)
糗事百科scrapy爬虫笔记 1.response是一个'scrapy.http.response.html.HtmlResponse'对象,可以执行xpath,css语法来提取数据 2.提取出来的数 ...
- Python爬虫(十七)_糗事百科案例
糗事百科实例 爬取糗事百科段子,假设页面的URL是: http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath/re做数据提取 ...
- python scrapy实战糗事百科保存到json文件里
编写qsbk_spider.py爬虫文件 # -*- coding: utf-8 -*- import scrapy from qsbk.items import QsbkItem from scra ...
- python 爬取糗事百科 gui小程序
前言:有时候无聊看一些搞笑的段子,糗事百科还是个不错的网站,所以就想用Python来玩一下.也比较简单,就写出来分享一下.嘿嘿 环境:Python 2.7 + win7 现在开始,打开糗事百科网站,先 ...
- Python抓取糗事百科成人版图片
最近开始学习爬虫,一开始看的是静觅的爬虫系列文章,今天看到糗事百科成人版,心里就邪恶了一下,把图片都爬下来吧,哈哈~ 虽然后来实现了,但还是存在一些问题,暂且不提,先切入正题吧,没什么好说的,直接上代 ...
- Python爬取糗事百科
import urllib import urllib.request from bs4 import BeautifulSoup """ 1.抓取糗事百科所有纯 ...
- python 抓取糗事百科糗图
1 首先看下要抓取的页面 这是糗事百科里面的糗图页面,每一页里面有很多的图片,我们要做的就是把这些图片抓取下来. 2 分析网页源代码 发现源代码里面的每张图是这样储存的,所以决定使用正则匹配出图片的u ...
- python爬取糗事百科段子
初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) #-*-coding:utf--*- import urllib import urllib2 import re page = url ...
- <爬虫实战>糗事百科
1.糗事百科段子.py # 目标:爬取糗事百科段子信息(文字) # 信息包括:作者头像,作者名字,作者等级,段子内容,好笑数目,评论数目 # 解析用学过的几种方法都实验一下①正则表达式.②Beauti ...
随机推荐
- redis学习教程五《管道、分区》
redis学习教程五<管道.分区> 一:管道 Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻 ...
- Cisco静态路由
怎样让身在两个网段的终端会话交流呢?我们借用Cisco packet研究一下Cisco静态路由. 名词解释: 网关:(Gateway)网间连接器,或叫协议转换器:举例(参考https://baike. ...
- UML——宏观总结
今天果断开始UML的学习,要不就要被12期赶超了.努力学习的效率 一.宏观导图把控 导图概要说明:RUP这块儿的内容相当于软件工程已经学过了,只不过这里换了个名词而已.面向对象,已经不再陌生,vb中早 ...
- Java-eclipse导入jar包
Java-eclipse导入jar包 方法一:基本步骤式 右键项目属性,选择Property,在弹出的对话框左侧列表中选择Java Build Path,如下图所示:选择Add External JA ...
- 深度学习论文翻译解析(十九):Searching for MobileNetV3
论文标题:Searching for MobileNetV3 论文作者:Andrew Howard, Mark Sandler, Grace Chu, Liang-Chieh Chen, Bo Che ...
- charles(3)charles防止30分钟自动重启
前言 Charles是收费软件,可以免费试用30天.试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时. 此时,我们只需网上找一个注册码即可 解 ...
- Pytest(13)命令行参数--tb的使用
前言 pytest 使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败. --tb=style 参数可以设置报错的时候回溯打印内容,可以设置参 ...
- zoj2112 Dynamic Rankings (主席树 || 树套树)
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- POJ - 1226 Substrings (后缀数组)
传送门:POJ - 1226 这个题跟POJ - 3294 和POJ - 3450 都是一样的思路,一种题型. POJ - 3294的题解可以见:https://www.cnblogs.com/li ...
- 【bzoj 2467】[中山市选2010]生成树(数论--排列组合)
题目:有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角形圈的中心的圈上有 ...