scrapy结合splash处理(ajax)分页抓取?( 二 )
-----------------------------------看题不仔细,再次修改-----------------------------------------------------------第一次写这么多,发现答题好难,膜拜各种大神.本来感觉下面的答案的并不完善,但是楼主私信问了,我就发出来吧,提供一下思路.下面我用selenium来测试一下楼主给的三个网站,至于phantomjs就是个无头浏览器,把代码中的Chrome改成Firefox和改成PhantomJS并没有大的区别,就是爬起来快点.首先第一个网站:
查看源代码可知这个翻页是用元素的隐藏和显示来实现(我不懂前端,我是这么认为的),数据都在源代码中,这个很简单,其实不用翻页也可以提取数据,但是为了实现楼主1w+的网站采集量,总有些网站时是这样的,那就写代码把这个兼容一下,其实就是用set()去重而已
第二个网站有点坑,最后说第三个网站:
这个是真翻页,每次都会刷新页面,所以算是比较标准的的,直接上图
但是这个有个问题,每次测试在我跑几十页之后都会出错,估计是有什么反爬的机制吧,没研究,多sleep()试试,而且这个网站访问速度奇慢,不知道是不是我网络问题,写代码没用多长时间,测试倒是挺费时间的
可以看出问题在于点击下一页成功但是页面加载失败.最后,我们来说说坑爹的第二个网站:

这个网页的列表数据是嵌套另一个网页,当你用selenium选择元素的时候你会发现选不到,这也就是第三种类型了--嵌套网页,我们需要做的就是在selenium选择元素之前使用driver.switch_to_frame(driver.find_element_by_xpath(the frame path]\u0026#39;))切换到相应的frame中,然后就可以了,代码只增加了一行
或者你也可以去frame的原网页查看嘛
你就会发现这个网页直接用构造url的方式就可以获取每一页列表数据了,没必要用selenium.讲了这么多,总结一下给出的三种网页类型:第一种:\u0026#39;伪翻页\u0026#39;,利用元素的显示和隐藏来实现翻页效果,可以用selenium,去重就好了,每次点击下一页没有新请求产生,应该不会太影响效率.第二种:真翻页,每一页请求,标准的网页,直接用selenium.第三种:嵌套网页,在选择元素之前请切换frame--------------------------------------------------代码区---------------------------------------------------------------接下在上代码import refrom selenium import commonimport seleniumfrom selenium import webdriverfrom bs4 import BeautifulSoupimport timedriver = webdriver.Chrome()driver.get(\u0026#39;http://www.mohrss.gov.cn/gkml/index2.html\u0026#39;)driver.implicitly_wait(10)infos = set()driver.switch_to_frame(driver.find_element_by_xpath(\u0026#39;//*\u0026#39;))for page in range(100): print(\u0026#39;正在扫描第{}页\u0026#39;.format(str(page+1))) soup = BeautifulSoup(driver.page_source, \u0026#39;lxml\u0026#39;) for i in soup.select(\u0026#39;.row\u0026#39;): info = re.sub(\u0026#39;\\s\u0026#39;, \u0026#39;\u0026#39;, i.get_text()) infos.add(info) print(\u0026#39;已获取信息: {}\u0026#39;.format(info)) try: driver.find_element_by_link_text(u"下一页").click() time.sleep(1) except selenium.common.exceptions.NoSuchElementException as e: print(e) print("扫描结束") break
推荐阅读
- 贝聊是一个啥样的产品
- 专家:提升中国特色心脏病防治水平应中西医结合、内外科联合
- 小儿|优势互补!产康与小儿推拿的完美结合!
- 和VR结合得最好的手机是哪个品牌
- 功夫汽车|汽车和艺术的结合,会产生怎样的“钜浪”?广汽传祺告诉你答案
- 共享单车和共享汽车有结合点吗
- 趣头条|【爱车大征集】智能舒适的轿跑SUV,超强的动力结合更加的年轻化
- 医学在未来会和互联网紧密结合吗有哪些方向丁香园又会向哪些方向发展
- android应用的splash是“中国特色”还是有用的东西
- 云计算,物联网和工业4.0能否真正的结合,我们还有多远的路要走
