爬虫抓取动态网页

--------------------------更新-----------------------------
谢谢大家提供的思路,想着先通过分析网页交互能不能找到方法,我又仔细看了看elements里的网页代码,发现搜索结果是通过AJAX返回一个链接的内容,即(http://search.ickey.cn/site/g...)我用python抓取这个链接可以从中得到我想要的内容。但是又碰到了另一个问题:我在浏览器里已经搜索过的器件型号,例如SC1894,python通过上述链接可以抓取到内容(浏览器直接输入这个getsup链接也可以)。要是我输入一个之前从来没搜索过的型号却没有数据返回?是不是在此之前还有什么我遗漏的东西呢

-------------------------原问题---------------------------
最近在学习爬取动态网页,想咨询一下:
我利用以下代码抓取的网页内容和chrome F12的elements相比少掉了我想要的内容,比如说<div class="search-result" id="searchResult"> 后紧接的搜索结果内容,搜索了一下网上的内容,好像是与javescript有空,需要如何操作才能抓到呢,想请教下思路

import urllib.request
weburl = 'http://search.ickey.cn/?keyword=SC1894&num='
webheader = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url = weburl, headers = webheader)
webPage = urllib.request.urlopen(req)
data = webPage.read()

data = data.decode('UTF-8')
print(data)
阅读 7.3k
5 个回答

网页是动态生成的,在爬去页面数据之前,思路应该是要想办法获取动态生成之后的网页内容,那要这么做的话,你可以使用PhantomJS去先把对应的网页加载好,然后再把加载好的内容再扔给Python,然后Python就开始解析。

补充:
其实每个网站的爬取规则都各有不同,如果你不是使用headless的浏览器去做(我上面提到的做法),那在分析API的时候,你就要看清楚API请求的时候包含的参数(最基本),请求方法,是否携带一些特定的http header之类的。

如果是用JS渲染的内容一般只能通过API抓取了。

两种方法,1.就像楼上说的利用PhantomJS模拟浏览器内核执行页面中渲染js数据到页面的js程序,2.就是浏览器控制台分析js数据的来源,直接python再去请求js数据来源地址,从中获取需要的信息

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进