php 抓取网页源码(豆瓣网源码爬取成功askURL方法代码解析数据得到网页源码 )

优采云 发布时间: 2021-11-25 20:21

  php 抓取网页源码(豆瓣网源码爬取成功askURL方法代码解析数据得到网页源码

)

  抓取网页(获取网页源码)

  定义 askURL 方法来获取指定网页的来源信息。需要在 askURL 中重新定义头部头部信息,以伪装浏览器信息,防止网站反爬虫程序识别错误418。

  如果没有设置header信息,使用Python程序爬取网站,显示user-agent信息为:

  

  这很容易被反爬虫系统识别。这是访问网站的测试,尝试豆瓣:错误418,我们被发现是一个爬虫。

  

  头部代理信息可以在打开的网页源码中找到

  

  修改头部代理然后测试爬取豆瓣源码

  #绕过反爬

# url="http://httpbin.org/get"

#url="http://httpbin.org/post"

url="http://douban.com"

headers={

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"

}#加入用户代理信息 伪装身份

req=urllib.request.Request(url=url,headers=headers)

response =urllib.request.urlopen(req)

print(response.read().decode("utf-8"))

  抓取成功

  

  askURL 方法代码

  def askURL(url):#得到指定的一个网页内容

#模拟浏览器头部信息,向豆瓣服务器发送消息

'''

head={ #用户代理,表示告诉服务器我们是什么类型的机器、浏览器(告诉浏览器我们可以接收什么水平的信息)

"User - Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 69.0.3947.100Safari / 537.36"

}

'''#注意UserAgent的格式与网页上的格式,否则报错418

head = { # 用户代理,表示告诉服务器我们是什么类型的机器、浏览器(告诉浏览器我们可以接收什么水平的信息)

"User-Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 69.0.3947.100Safari / 537.36"

}

request=urllib.request.Request(url,headers=head)

html=""

try:

response=urllib.request.urlopen(request)

html=response.read().decode("utf-8")

#print(html)

except urllib.error.URLError as e:

if hasattr(e,"code"):

print(e.code)

if hasattr(e,"reason"):

print(e.reason)

return html

  分析数据

  获取到网页的源代码后,要分析源代码,我们需要从源代码中剥离出我们需要的内容。

   #baseurl = "https://movie.douban.com/top250?start="

for i in range(0,10):#调用获取网页函数10次

url=baseurl+str(i*25)#start后依次为0、25、50……225

html=askURL(url)#保存获取到的网页源码

  通过分析网页URL格式,我们知道250个电影信息分布在10个网页上,每个网页有25个电影信息,所以需要循环10次才能调用获取网页源代码的方法。

  首先分析网页源代码:

  

  

  

  发现每一个li,/li都是一部电影的信息,然后点进第一个li,发现主体是div class="item",然后用了我们BeautifulSoup模块中的解析器。

  解析网页需要 BeautifulSoup 模块

  soup= BeautifulSoup(html, "html.parser")

for item in soup.find_all('div',class_="item"): #查找符合要求的字符串,形成列表

#print(item) #测试查看电影所有信息 #class是一个类别所以加一个_

data=[] #保存一部电影的所有信息

item=str(item)

  这是爬取的电影的item源码

  

1

肖申克的救赎

/ The Shawshank Redemption

/ 月黑高飞(港) / 刺激1995(台)

[可播放]

<p class="">

导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...

1994 / 美国 / *敏*感*词* 剧情

9.7

2154144人评价

  

希望让人自由。

</p>

  通过分析第一步电影的网页源代码,我们可以获得更准确的符合我们要求的信息。

  首先,例如获取电影的网页链接:

  findLink=re.compile(r&#39;<a href="(.*?)">&#39;)

#创建正则表达式对象,表示规则(字符串的模式)影片链接规则↑

#(.*?)表示一个组——中间的网址,提取源码中的电影链接

link=re.findall(findLink,item)[0]#re库通过正则表达式查找指定字符串的第一个符合条件的

data.append(link)#将搜索到的网址添加到data中

  同理,让我们获取更多我们需要的信息,比如电影图片,电影片名,评分,评论数,一句话总结,电影总结等等……

  只需要编写相应的正则表达式就可以提取出相应的信息。

<p>findImgSrc=re.compile(r&#39;

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线