《作文精编大全》,Python程序员用爬虫制作的

556 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

⛳️ 实战场景

本篇博客又是一个 Python 爬虫实战,目标站点时作文吧,一个充满作文的站点 zuowen8.com,由于其站点有那么一点点的付费需求,所以有一名爸爸级开发工程师不开心了,决定写一个小小的爬虫,他要的不多,就是一年级那一点点作文。

就是下面这个图让程序员干活的~

![《作文精编大全》,Python程序员用爬虫制作的](img-blog.csdnimg.cn/303b90851f1… =200x)

打开一年级作文列表页,页面如下所示,接下来要完成的第一步就是采集这个列表页的数据。

⛳️ 采集列表页

Python 在编写简易爬虫的时候,requests + lxml 是最简单的方式。

import requests
import json

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
}

res = requests.get('https://www.zuowen8.com/xiaoxue/yinianjizuowen/', headers=headers)
print(res.text)

直接运行代码,会得到中文乱码界面,即下图所示内容。

《作文精编大全》,Python程序员用爬虫制作的

对响应对象设置编码,代码如下:

res = requests.get('https://www.zuowen8.com/xiaoxue/yinianjizuowen/', headers=headers)
res.encoding = 'utf-8' # 编码错误
print(res.text)

结果设置 utf-8 之后,编码依旧错误,此时就需要查看一下网页源码中的具体编码设置了,打开开发者工具,查看源码编码,发现网站采用的是 gb2312,参考该值进行设置即可。

《作文精编大全》,Python程序员用爬虫制作的

res = requests.get('https://www.zuowen8.com/xiaoxue/yinianjizuowen/', headers=headers)
res.encoding = 'gb2312'
print(res.text)

⛳️ 提取列表作文地址

页面源码获取到之后,就可以提取作文详情页地址了,即下图红框区域链接。

《作文精编大全》,Python程序员用爬虫制作的

res.encoding = 'gb2312'
e = etree.HTML(res.text)
h3_list = e.xpath("//h3/a/@href")
print(h3_list)

链接获取完毕,需要将其进行拼接,得到详情页完整地址,使用 f-strings 即可。

base_domain = 'https://www.zuowen8.com'
for url in h3_list:
    url = base_domain+url
    print(url)

详情页地址拼接完毕,再次使用 requests 模块对详情页源码进行捕获。

for url in h3_list:
    url = base_domain+url
    detail = requests.get(url,headers=headers)
    detail.encoding = 'gb2312'
    print(detail.text)

获取到作文详情页面源码,提取作文内容,即下图红框区域展示信息。

《作文精编大全》,Python程序员用爬虫制作的

⛳️ 提取作文 8 内容

观察上图可以看到作文内容全部都在 class 等于 contentdiv 中,所以对其解析即可。

for url in h3_list:
    url = base_domain+url
    detail = requests.get(url,headers=headers)
    detail.encoding = 'gb2312'
    d = etree.HTML(detail.text)
    content = d.xpath('//div[@class="content"]//p/text()')
    print(content)

上述 xpath 表达式仅提取 div 元素中的子标签 p 的内部文字,恰好忽略了标签 u 中的反爬信息,即下图绿框数据需要被忽略。

《作文精编大全》,Python程序员用爬虫制作的

运行代码,得到的内容如下所示,每一篇作文都按照段落提取成列表。

'今天,我和妹妹到楼下去抓蚂蚁。我抓了很多只大蚂蚁,大……', '后来,我又用棍子挑蚂蚁,', '谁知蚂……来。', '地上掉了一只辣椒,我看见很多蚂蚁在啃辣椒,有些蚂蚁被辣得跑掉了,有些蚂蚁在津津有味地啃着辣椒,还有几只蚂蚁想拖动辣椒,但是拖了半天都没拖动。'

最后只需要将列表中的内容进行拼接,就可以完成属于你的《作文精编大全》。

📢📢📢📢📢📢 💗 你正在阅读 【梦想橡皮擦】 的博客 👍 阅读完毕,可以点点小手赞一下 🌻 发现错误,直接评论区中指正吧 📆 橡皮擦的第 739 篇原创博客