爬取糗事百科实例代码
经过最近的学习,可以简单尝试着爬取一些网页了。今天以爬取糗事百科为例,并将实例代码附在下面,对于代码文末有逐行解释。有需要的同学自取。喜欢的点个赞,感谢。
代码
import requests
from lxml import etree
Headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.48"
}
Base_url = "https://www.qiushibaike.com"
qiushis = []
def spider():
url = "https://www.qiushibaike.com/text/page/{}/"
# 循环列表页
for x in range(1, 2):
url = url.format(x)
detail_urls = get_detail_urls(url)
# 循环详情页的
for detail_url in detail_urls:
qiushi = parse_detail(detail_url)
qiushis.append(qiushi)
print(qiushi)
# 解析详情页的内容
def parse_detail(url):
qiushi = {}
resp = requests.get(url, headers=Headers)
text = resp.content.decode("utf-8", "ignore")
html = etree.HTML(text)
DivE = html.xpath("//div[@class='col1 new-style-col1']")[0]
title = DivE.xpath("//h1[@class='article-title']/text()")[0]
qiushi["title"] = title
content = DivE.xpath("//div[@class='content']/text()")[0]
qiushi["content"] = content
return qiushi
# 拿到详情页的地址
def get_detail_urls(url):
res = requests.get(url, headers=Headers)
text = res.text
html = etree.HTML(text)
detail_urls = html.xpath("//div[@class='article block untagged mb15 typs_hot']/a[@class='contentHerf']/@href")
detail_urls = map(lambda url: Base_url + url, detail_urls)
return detail_urls
if __name__ == '__main__':
spider()
通过运行如上代码,可以得到运行结果:
成功爬取到段子的标题和内容:
代码分析:
(1)1行
导入程序需要的库,Requests库用于请求网页获取网页数据。
(2)2行
etree.HTML()方法可以用来解析字符串格式的HTML文档对象,使用xpath()方法获取html源码中的内容。
(3)4~7行
通过Chrome浏览器的开发者工具,复制User-Agent,用于伪装为浏览器,便于爬虫的稳定性。
(4)9行
定义qiushis = []空列表,用于存放爬取的信息。
(4)11~23行
定义spider函数,**for x in range(1, 2)😗*循环列表页,**for detail_url in detail_urls:**循环详情页,print函数将结果输出屏幕上。
(5)27~38行
定义parse_detail函数,使用Xpath方法获取HTML中需要爬取的内容,并将爬取的值返回。
(6)41~48行
定义get_detail_urls函数,获取到详情页的地址。
(7)51~52行
判断当前模块名是否为main,是的话执行spider脚本。
“main” 始终指当前执行模块的名称(包含后缀.py)
对于(7)有不懂的同学可以参考下面篇文章: 【1】[Python中if __name__ == '__main__':的作用和原理](https://blog.csdn.net/heqiang525/article/details/89879056)