前言
辅导员要求发博客,不知道写啥。最近学了下python爬虫的东西,就简单写下爬虫吧
本案例使用python爬虫技术从文案网页http://www.xhwag.com/爬取文案并保存到本地
项目准备
开发环境 :python=3.10
用到的包:re,requests
requests包安装
终端执行以下代码
pip install requests
如果速度太慢,可以使用清华源下载
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
爬虫流程
- 获取url
- 发送请求
- 解析数据
- 保存数据
思路
爬取的数据分布在多个页面中,同时每个页面中存在其他页面的链接,所以我们可以从一个起始页面开始用BFS逐个页面爬取,维护一个待访问页面的列表和一个以访问页面的列表。用re模块解析每个页面的数据,文案自定义保存,其他网页链接存入待访问列表。循环从待访问列表中取出url检查是否在以访问页面的列表中,存在就重新获取,不存在就存入以访问页面的列表并且发送请求
实现
网页太简陋,没有反爬,只用get(url)就成
必须要有起始页面自己决定
n是最多爬取的页面数量,我自己运行的时候还没到100待访问列表就空了直接就退出了
用res.content.decode("utf-8")是因为res.text有乱码,其他网站不一样,具体情况具体分析
tool.py
def count(num=0):
while True:
num+=1
yield num
main.py
import requests
import re
from tool import count
n =100
ct=count()
com = "http://www.xhwag.com/"
urllist = ["dw677.html"]
old_url = []
s = r'<p style="font-family: 楷体; font-size: 20px;">(.*?)</p>'
s2 = r'<a target="_blank" href="(.*?)" title=".*?</a>'
f = open("文案.txt", "w", encoding="utf-8")
isempty=False
for i in range(n):
url = urllist.pop(0)
while url in old_url:
if not len(urllist):
isempty=True
break
url = urllist.pop(0)
if isempty:
break
res = requests.get(com + url)
old_url.append(url)
html = res.content.decode("utf-8")
li = re.findall(s, html)
new_url = re.findall(s2, html)
for url in new_url:
urllist.append(url)
print(li)
f.writelines(["{:}、".format(next(ct))+ s.split("、")[1] + '\n' for s in li])
f.close()
效果展示
建议去爬键仙语录,再做个自动水群程序。
第一次发,别喷