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 ...
随机推荐
- Docker是如何实现隔离的
Docker是如何实现隔离的 2.进程的隔离 4.文件的隔离 5.资源的限制 7.与传统虚拟机技术的区别 原文地址: 微信公众号:<鲁智深菜园子>:Docker是如何实现隔离的 # 1.运 ...
- spark SQL (四)数据源 Data Source----Parquet 文件的读取与加载
spark SQL Parquet 文件的读取与加载 是由许多其他数据处理系统支持的柱状格式.Spark SQL支持阅读和编写自动保留原始数据模式的Parquet文件.在编写Parquet文件时,出于 ...
- java正则表示判断。是否以某个关键字结尾的
String defaultPageSqlId = ".*ByPaging$"; System.out.println("dsdsdsdByPaging".ma ...
- ICMP&&PING
ICMP 1.定位:互联网控制报文协议(Internet Control Message Protocol),是TCP/IP协议族的一个子协议,位于网络层.它被IP用于提供许多不同的服务.ICMP是一 ...
- 2019牛客暑期多校训练营(第八场)A.All-one Matrices(dp)
题意:又是最大01矩阵的模型了 这次要找的是极大0/1矩阵的个数 思路:我们像处理最大01矩阵那样处理一下边界 由于我们上左右已经无法再继续扩展 我们只需要用前缀和记录一下是否可以向下扩展(即判断当前 ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
- 洛谷 P1077 摆花 (背包DP)
题意:有\(n\)种花,每种花有\(a_i\)盆,现在要摆\(m\)盆花,花的种类从\([1,n]\)有序排放,问有多少种方案数. 题解:这题可以借用01背包的思路,感觉更好想一点,我们首先枚举\(n ...
- Proud Merchants HDU - 3466 01背包&&贪心
最近,我去了一个古老的国家.在很长一段时间里,它是世界上最富有.最强大的王国.结果,这个国家的人民仍然非常自豪,即使他们的国家不再那么富有.商人是最典型的,他们每个人只卖一件商品,价格是Pi,但是如果 ...
- Codeforces Round #656 (Div. 3) C. Make It Good (贪心,模拟)
题意:给你一个数组\(a\),可以删除其前缀,要求操作后得到的数组是"good"的.对于"good":可以从数组的头和尾选择元素移动到新数组,使得所有元素移动后 ...
- Service Cloud 零基础(四)快速配置一个问卷调查(无开发)
本篇参考:https://trailhead.salesforce.com/content/learn/modules/survey-basics 我们在工作和生活中会经历过形形色色得调查问卷,有一些 ...