python爬取文章阅读网实战

为了每天晚上给女朋友讲故事,我决定爬取一些文章存在手机里每晚为她读一篇。于是就目光锁定在文章阅读网的爱情专栏。

首先,做好爬取准备,理清一下爬取的思路

  1. 进入文章阅读网,点击爱情文章
    在这里插入图片描述

  2. 我们的目标要爬取的是文章的题目和内容,往下拉会看到爱情文章这个专栏总共有109页。
    在这里插入图片描述

  3. 现在知道这些就已经做到心里有数了,接下来打开pycharm开始代码准备吧。

  4. 打开pycharm,新建一个sanwen.py

from urllib import request
from lxml import etree
import requests
#首先定义一个请求头
headers = {
	'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

在这里插入图片描述
在此网站打开开发者工具,刷新下页面,点击Network,找到User-Agent,粘贴复制即可。

刚才说的共109页,需要全部爬取下来,看了每次下一页的url链接,有个规律
在这里插入图片描述
这一个总共109页,每次变得只是这个属性的值的数字发生变化,所以我这样做

#这是一个完整的url代码需要与上述的代码结合才能得到每一页
url_1 = 'http://www.duwenzhang.com/wenzhang/aiqingwenzhang/'
for i in range(110):
	if i >= 1:
		page_url = 'list_1_' + str(i) + '.html'
		#下一页
		next_page = url_1 + page_url
		#请求网页
		res = requests.get(next_page)
		#看到网页源代码是gb2312
		res.encoding = 'gb2312'
		#将网页代码转化成xml语言,便于xpath提取
		res_xpath = etree.HTML(res.text)
		#获取一页中的所有文章标题的url
		titles_url = res_xpath.xpath("//table[@class='tbspan']//tr[2]//b/a/@href")
		#遍历每一页的url,即每一篇文章的url
		for title_url in titles_url:
			#请求网页
			content = requests.get(title_url)
			content.encoding = 'gb2312'
			content_xpath = etree.HTML(content.text)
			content_text = content_xpath.xpath(".//div[@id='wenzhangziti']/p//text()")
			#上行代码得到的是一个列表,要把它变成字符串
			content_text_strs = " ".join(content_text)
			#拿到文章的标题
			title = content_xpath.xpath(".//td/h1/text()")
			#变成字符串
			title_strs = " ".join(title)
			#写入txt文件
			f = open("sanwen.txt","a",encoding='utf-8')
			f.write(title_strs)
			f.write("\n")
			f.write(content_text_strs)
			f.write("\n完篇=======")
			f.close()
		#为了方便查看程序运行的状态
		print("已写入了"+str(i)+"页")		

解释一下,代码里的xpath寻找方法:
在这里插入图片描述
得到h1的文本用text()方法
在这里插入图片描述

这个网站的反爬虫机制,并没有限制太大,甚至说没有反爬虫,相对容易些。

在这里插入图片描述
又再次运行了一下,完结撒花。

发布了26 篇原创文章 · 获赞 5 · 访问量 777

猜你喜欢

转载自blog.csdn.net/weixin_44730235/article/details/104563615
今日推荐