python抓取动态网页(爬取js动态生成的页面是获取不到内容的源代码 )
优采云 发布时间: 2021-12-05 06:17python抓取动态网页(爬取js动态生成的页面是获取不到内容的源代码
)
抓取js动态生成的页面时,直接打开页面无法获取内容。比如我在抓取百度手机助手应用的时候就遇到了这样的问题。搜索旅游应用的时候,返回的数据有好几页内容,但是无论翻到哪一页,查看源码都可以找到,也就是第一页的源码。分析原因,我认为可能是这样的:假设百度应用的一个页面上有八个应用。你提交查询之后,他从内容的前八页生成一个html,然后你翻页的时候,替换成js,ajax等,原来的8个应用,比如你选择第五页的时候,用返回到应用程序列表的 33-40 个应用程序替换原来的 1-8 个应用程序。(应该是ajax或者其他更可能的表单提交方式,因为纯js不涉及表单提交等后端交互,第一次查询时所有结果都需要返回并存储在前端)【个人分析,请指正】
文章 想法参考来自:感谢原作者
好了,既然我们的目标已经明确了,那就找到对应的表达式提交(或js)动作。这里我们使用谷歌的开发者工具。我们接下来的操作是在谷歌浏览器中进行的。
让我们从头开始:
1、打开手机助手搜索“旅行”,网址:travel
我们得到了一个搜索结果:搜索到你:461旅游申请结果
这时候就可以查看源文件了。
2、 翻页url:旅游#page2发现源文件还是一样,这是动态加载造成的,那后面的界面怎么把握呢?
3、打开谷歌开发者工具:
此时没有内容,需要加载一次页面:url:%E6%97%85%E6%B8%B8#page2
在保留开发者工具如上图的前提下,在地址栏中输入你要解析的页面的URL(如上面的URL),然后就可以看到内容了:
里面的东西很多,我们需要一一看,但是你会发现,真正有价值的东西并不多。我们终于找到了这个:
这里的app名称就是我们想要爬取到第二页的app名称,这也是我们最终想要的。
4、 右击左边红框,可以复制链接:%E6%97%85%E6%B8%B8&page=1&_=09
打开这个链接后,我们发现这个网页的源码就是我们想要的(其实就是表单提交)。不是很好吗?
5、 但这还不够。我们想要的是一个通用的方法。提交此表单后如何构造数字?直接删除就行了,就是%E6%97%85%打开E6%B8%B8&page=1后,效果是一样的。如果一些网站有影响,你可以找到更多的模式。
6、 根据我们目前的信息,总结规则:
页码
#关于页码,需要说明一下,如果是第n页,填写页码n-1,第一页为0
7、 可能出现乱码,需要修改chrome编码为utf8
这个爬虫的python源代码:
#encoding:utf8
# @Author lvpengbin
'''
爬取百度手机助手app_name示例代码,以爬取搜索关键字“旅游”返回结果的第二页为例 url:http://shouji.baidu.com/s?wd=旅游#page2
'''
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import urllib2
from bs4 import BeautifulSoup
url='http://shouji.baidu.com/s?data_type=app&multi=0&ajax=1&wd=%E6%97%85%E6%B8%B8&page=1'
req_header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0',
'Accept':'*/*',
'Accept-Language':'zh-CN,zh;q=0.8',
'Connection':'close',
'Referer':None #注意如果依然不能抓取的话,这里可以设置抓取网站的host
}#这里需要设置header,要不然系统默认的Accept-Language是英语,返回的页面是英文的
req_timeout = 5
req = urllib2.Request(url,None,req_header)
resp = urllib2.urlopen(req,None,req_timeout)
html = resp.read()
soup = BeautifulSoup(html)
nodes = soup.find_all("a",onclick="bd_app_dl(this,event);")
for node in nodes:
print node['data_name']
'''
输出:
优步 - Uber
蚂蜂窝自由行
飞常准
TripAdvisor
和生活
易到用车
爱城市
智行火车票-12306购票
TripAdvisor
淘在路上旅游
'''