php抓取网页匹配url(网页源码的获取及获取、提取、所得结果的整理)
优采云 发布时间: 2022-03-03 04:03php抓取网页匹配url(网页源码的获取及获取、提取、所得结果的整理)
获取数据是数据分析的重要环节,网络爬虫是获取数据的重要渠道之一。鉴于此,我拿起了 Python 作为武器,开始了爬网之路。
本文使用的版本是python3.5,意在采集证券之星当天所有A股数据。程序主要分为三个部分:网页源代码的获取、所需内容的提取、所得结果的排列。
一、获取网页源代码
很多人喜欢使用python爬虫的原因之一是它很容易上手。只有以下几行代码才能爬取大部分网页的源代码。
import urllib.request
url='http://quote.stockstar.com/stock/ranklist_a_3_1_1.html' #目标网址
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"} #伪装浏览器请求报头
request=urllib.request.Request(url=url,headers=headers) #请求服务器
response=urllib.request.urlopen(request) #服务器应答
content=response.read().decode('gbk') #以一定的编码方式查看源码
print(content) #打印页面源码
虽然很容易抓取一个页面的源代码,但是一个网站中抓取的大量网页源代码却经常被服务器截获,顿时觉得这个世界充满了恶意。于是我开始研究突破反爬虫限制的功法。
1.伪造的 vagrant 头文件
很多服务器使用浏览器发送的头部来确认是否是人类用户,所以我们可以通过模仿浏览器的行为来构造请求头部来向服务器发送请求。服务器会识别其中一些参数来识别你是否是人类用户,很多网站会识别User-Agent参数,所以最好带上请求头。一些高度警戒的网站也可能通过其他参数来识别,比如Accept-Language来识别你是否是人类用户,而一些具有防盗链功能的网站还要带上referer参数等.
2.随机生成UA
证券之星只需要带参数User-Agent即可爬取页面信息,但如果连续爬取多个页面,服务器会阻塞。所以我决定每次爬取数据时模拟不同的浏览器发送请求,而服务器使用User-Agent来识别不同的浏览器,所以每次爬取一个页面,我可以通过随机生成不同的UA构造头来请求服务器。
3.放慢爬行速度
虽然模拟了不同的浏览器爬取数据,但发现在某些时间段,可以爬取上百页的数据,有时只能爬取十几页。似乎服务器也会根据您的访问频率来识别您。无论是人类用户还是网络爬虫。所以每次我爬一个页面时,我都会让它随机休息几秒钟。添加这段代码后,我可以在每个时间段爬取大量的*敏*感*词*。
4.使用代理IP
意外情况,该程序在公司测试成功,回到宿舍发现只能抓取几页,就被服务器屏蔽了。惊慌失措的我连忙询问度娘,得知服务器可以识别你的IP,并记录来自这个IP的访问次数。你可以使用一个高度匿名的代理IP,并在爬取过程中不断更改,让服务器查不出谁是真凶。该技能尚未完成。如果你想知道接下来会发生什么,请听下一次。
5.其他突破反爬虫限制的方法
许多服务器在接受浏览器请求时会向浏览器发送一个cookie文件,然后使用cookie来跟踪您的访问过程。为了防止服务器识别出你是爬虫,建议自带cookie一起爬取数据;如果遇到想模拟登录的网站,为了防止自己的账号被封,可以申请大量账号,然后爬进去。这涉及到模拟登录、验证码识别等知识,所以我暂时不深入研究。.. 总之,对于网站的主人来说,有些爬虫真的很烦人,所以会想出很多办法来限制爬虫的进入,所以我们在强行进入后要注意一些礼仪,不要不要把别人的 网站
二、提取所需内容
得到网页的源代码后,我们就可以从中提取出我们需要的数据了。从源代码中获取所需信息的方法有很多,使用正则表达式是比较经典的方法之一。我们先来看采集网页的部分源码。
为了减少干扰,我先用正则表达式从整个页面源代码匹配上面的body部分,然后从body部分匹配每只股票的信息。代码显示如下。
<p>pattern=re.compile('(.*?)