目录
概述
爬取笑话段子。
准备
所需模块
- re
- requests
- lxml
涉及知识点
- python基础
- requests模块基础
- re模块基础
- xpath表达式基础
运行效果
控制台打印:
完成爬虫
1. 分析网页
打开笑话大全,按F12分析网页
第一页的URL是:http://www.lovehhy.net/Joke/Detail/QSBK/1
第二页的URL是:http://www.lovehhy.net/Joke/Detail/QSBK/2
同理第三页的URL是:http://www.lovehhy.net/Joke/Detail/QSBK/3
比较三者:
# 第1页的URL:http://www.lovehhy.net/Joke/Detail/QSBK/1
# 第2页的URL:http://www.lovehhy.net/Joke/Detail/QSBK/2
# 第3页的URL:http://www.lovehhy.net/Joke/Detail/QSBK/3
# 故可以得到请求的URL公式:url="http://www.lovehhy.net/Joke/Detail/QSBK/"+page_index
# 其中page_index为页码
因此可以根据URL获取响应得到的HTML源码,然后使用xpath表达式提取想要的数据。
2. 爬虫代码
import re
import requests
from lxml import etree
# 爬虫实战:爬取笑话段子
# 第1页的URL:http://www.lovehhy.net/Joke/Detail/QSBK/1
# 第2页的URL:http://www.lovehhy.net/Joke/Detail/QSBK/2
# 第3页的URL:http://www.lovehhy.net/Joke/Detail/QSBK/3
# 故可以得到请求的URL公式:url="http://www.lovehhy.net/Joke/Detail/QSBK/"+page_index
# 其中page_index为页码
# 打印的页数
page_num = int(input("请输入您要获取多少页笑话:"))
for index in range(1, page_num + 1):
# 请求的URL
url = "http://www.lovehhy.net/Joke/Detail/QSBK/" + str(index)
# 发送请求,获取响应到的HTML源码
response = requests.get(url).text
# 处理换行问题,如果不处理,只会得到一行的内容
response = re.sub("<br />", "", response)
# 将HTML源码字符串转换成HTML对象
html = etree.HTML(response)
# 获取所有笑话的标题
data_title_list = html.xpath("//div//h3/a")
# 获取所有笑话的内容
data_content_list = html.xpath("//div//div[@id='endtext']")
# 打印到控制台
if len(data_title_list) == len(data_content_list):
for i in range(0, len(data_title_list)):
print(data_title_list[i].text, "\n", data_content_list[i].text, "\n\n\n")