使用python中的网络爬虫收集网站数据
import urllib.request
import re
url="https://blog.csdn.net/"
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='<a href="(https://blog.csdn.net/.*?)"'
mydata=re.compile(pat).findall(data)
for i in range(0,len(mydata)):
file="E:/新建文件夹/22/sinanews/"+str(i)+".html"
urllib.request.urlretrieve(mydata[i],filename=file)
print("第"+str(i)+"次爬取成功")
代码详细分析
第一部分
import urllib.request
import re
上面两行代码是编写网络爬虫必要的库导入操作,urllib.request是读取网页数据的库导入。re是正则表达式,是对提取信息规则的一种约束,即可以根据自己的需求调整正则表达式来获取网页不同的信息。
第二部分
url="https://blog.csdn.net/"
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
第一条代码是设定读取的特定对象,接下来就是将代码伪装成浏览器爬取特定网站数据,固定规则如上所示。关于user-agent的获取如下图所示:对特定网页按F12键,即可看到下方出现一些进程。选中network中的all,然后对网页做任意操作,即可在headers中出现user-agent的相关信息。
第三部分
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
pat='<a href="(https://blog.csdn.net/.*?)"'
mydata=re.compile(pat).findall(data)
对网站数据进行读入,使用utf-8规则对网页进行解码,忽略其中出现的错误,防止爬虫终止。pat是正则表达式,对网页数据进行规则提取。mydata是对解码后的数据进行全部读取,此时mydata是列表格式。
第四部分
for i in range(0,len(mydata)):
file="E:/新建文件夹/22/sinanews/"+str(i)+".html"
urllib.request.urlretrieve(mydata[i],filename=file)
print("第"+str(i)+"次爬取成功")
此处对数据进行循环读取,放入自己的文件夹下,用urlretrieve方法对数据进行全部读取,并使用智能提示显示程序进程。