scrapy可以爬取静态页面,但目前越来越多的网站数据都是通过js动态加载处理的。要想爬取这部分数据必不可少的对js处理的动态页面进行处理。一个简单的方法就是集成js处理工具,笔者在此选用的是selenium。
scrapy的安装见笔者其他文章。在此笔者使用的是win7 64位环境。
python环境安装selenium较为简单,使用命令可以自动获取最新版本的selenium,笔者安装的是selenium 3.0.2,详见https://pypi.python.org/pypi/selenium/3.0.2:
pip install selenium
安装好selenium还需安装各个浏览器的driver,selenium才能正常使用,笔者就主流浏览器ie,Firefox,chrome进行举例,关于各浏览器的版本问题,详见http://docs.seleniumhq.org/download/ :
1、IE浏览器IEDriverServer
selenium官网给出win7 64位的IEDriverServer下载链接为:http://selenium-release.storage.googleapis.com/2.53/IEDriverServer_x64_2.53.1.zip
下载解压后即可使用:
iedriver = "D:\scrapy\selenium\driver\IEDriverServer.exe" driver = webdriver.Ie(iedriver)
2、chrome浏览器chromedriver
下载链接为:http://chromedriver.storage.googleapis.com/2.25/chromedriver_win32.zip
下载解压后即可使用:
chromedriver = "D:\scrapy\selenium\driver\chromedriver.exe" driver = webdriver.Chrome(chromedriver)
3、Firefox浏览器geckodriver
下载链接为:https://github.com/mozilla/geckodriver/releases
下载解压后即可使用:
firefoxdriver = "D:\scrapy\selenium\driver\geckodriver.exe" binary = FirefoxBinary("C:\Program Files (x86)\Mozilla Firefox\Firefox.exe") driver = webdriver.Firefox(executable_path=firefoxdriver,firefox_binary=binary)
注:firefox浏览器路径需要做指定,如不指定会出现报错:
WebDriverException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
————————————————分割线————————————————
以上是selenium的环境搭建。下面开始将selenium与scrapy进行集成。
一般来说集成selenium到scrapy框架的方式有2种:
1、创建Middleware,在Middleware中调用selenium进行动态加载。但是此种方式由于对所有连接进行无差别通过selenium进行加载,灵活性太差,会拖慢scrapy的运行效率,不推荐使用。
2、在scrapy的Spider中针对必要的网页调用selenium进行动态加载。此种方式较为灵活,同时也可以做针对特定网站的操作。下面主要对此种方式进行说明:
from scrapy.selector import Selector #添加selenium依赖声明 from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.firefox.firefox_binary import FirefoxBinary …… #初始化selenium对象 def __init__(self): CrawlSpider.__init__(self) #firefox firefoxdriver = "D:\scrapy\selenium\driver\geckodriver.exe" binary = FirefoxBinary("C:\Program Files (x86)\Mozilla Firefox\Firefox.exe") self.driver = webdriver.Firefox(executable_path=firefoxdriver,firefox_binary=binary) # 设定页面加载限制时间 self.driver.set_page_load_timeout(10) self.driver.maximize_window() def __del__(self): self.driver.close() …… #具体处理 def parse_item(self, response): print response.url try: self.driver.get(response.url) except TimeoutException: #print 'time out after 10 seconds when loading page' self.driver.execute_script('window.stop()') #当页面加载时间超过设定时间,通过执行Javascript来stop加载,即可执行后续动作 …… #可使用scrapy的Selector处理加载到的页面,侵入性较小 #也可通过selenium做一些高级操作,或直接使用selenium的页面处理 sel = Selector(text = self.driver.page_source)
这样就可以通过selenium加载js动态数据,并沿用scrapy的页面处理方式。
相关推荐
虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个...
适合需要一定selenium,想学习结合scrapy爬虫的以及想了解推特一些反爬虫机制的朋友
使用scrapy和selenium结合爬取网易新闻内容
Python爬虫实战 | (21) Scrapy+Selenium爬取新浪滚动新闻-附件资源
东方财富网个股研报信息爬虫说明文档介绍东方财富网爬虫是一个基于Scrapy-Selenium框架爬取东方财富网的个股研报标题、个股信息以及收益的爬虫。代码说明运行环境Windows 10 专业版Python 3.5/Scrapy 1.5.0/MongoDB ...
使用scrapy框架定时爬取两个爬虫,爬取两个网页 定时爬取,爬取欧空局,费米卫星的观测计划。Scrapy是一个快速的、高层次的web爬虫框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy使用了Python语言,并且...
通过 scrapy 爬虫架构爬取中国古诗网的 唐诗三百首 通过 scrapy 爬虫架构爬取中国古诗网的 唐诗三百首 通过 scrapy 爬虫架构爬取中国古诗网的 唐诗三百首 通过 scrapy 爬虫架构爬取中国古诗网的 唐诗三百首
Scrapy + selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分析简书文章的url规则 使用selenium请求页面 使用xpath获取需要...
其中,项目分为两部分:一是基于Scrapy和Selenium爬取京东商品列表信息,覆盖至少50页数据;二是利用scrapy-redis实现CSDN学院平台课程信息的分布式爬取,包括课程标题、课时、讲师、适合人群、学习人数、价格和课程...
1、Scrapy的简介。...主要知识点:创建Scrapy项目(scrapy startproject)、定义提取的结构化数据(Item)、编写爬取网站的 Spider 并提取出结构化数据(Item)、编写 Item Pipelines 来存储提取到的Item(即结构化数据)。
为了克服这一难点,可以通过结合使用Selenium来模拟这些操作,并且在Scrapy框架中集成Selenium,让其在请求处理阶段就模拟完成整个页面的动态加载过程。 在实例代码中,首先引入了selenium的webdriver,并创建了...
本期内容:基于scrapy+mysql爬取博客信息并保存到数据库中 实验需求 - anaconda丨pycharm - python3.11.4 - scrapy - mysql 实验描述 本次实验实现了:使用Scrapy框架爬取博客专栏的目录信息并保存到MySQL数据库...
由于今日头条的网页可能存在动态加载的内容,因此可能需要结合Selenium这样的浏览器自动化工具来确保获取完整数据。 【知识点详解】 1. **爬虫基础**:爬虫是自动抓取互联网信息的程序,它通过模拟浏览器发送HTTP...
1. **安装与设置Scrapy**:在Python环境中,使用`pip install scrapy`命令安装Scrapy。之后创建一个新的Scrapy项目,通过运行`scrapy startproject project_name`命令,这会生成一个包含默认目录结构的项目。 2. **...
在本项目"使用scrapy框架爬取一些医疗疾病数据"中,我们将深入探讨如何利用Scrapy处理分页、分块以及多级嵌套的数据爬取。 首先,让我们了解Scrapy的基本架构。Scrapy由多个组件构成,包括Spider、Item、Item ...
【作品名称】:基于python的scrapy爬虫,爬取链家网成都地区新房源,并用高德api在地图上可视化显示 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或...