【爬虫】selenium集成到scrapy中

news/2024/7/19 11:36:38 标签: python, 爬虫

在middlewares.py中定义一个class:

 1 from selenium.common.exceptions import TimeoutException
 2 from scrapy.http import HtmlResponse  #传递js加载后的源代码,不会返回给download
 3 class JSPageMiddleware(object):
 4     #通过chrome请求动态网页
 5     def process_request(self, request, spider):
 6         if spider.name == "JobBole":
 7             try:
 8                 spider.browser.get(request.url)
 9             except TimeoutException:
10                 print('30秒timeout之后,直接结束本页面')
11                 spider.browser.execute_script('window.stop()')
12             import time
13             time.sleep(3)
14             print("访问:{0}".format(request.url))
15 
16             return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)
17             '''编码默认是unicode'''

spider中的代码:

 1 name = "JobBole"
 2     allowed_domains = ["jobbole.com"]
 3     start_urls = ['http://blog.jobbole.com/all-posts/']
 4 
 5     def __init__(self):
 6         '''chrome放在spider中,防止每打开一个url就跳出一个chrome'''
 7         self.browser=webdriver.Chrome(executable_path='E:/chromedriver.exe')
 8         self.browser.set_page_load_timeout(30)
 9         super(JobboleSpider, self).__init__()
10         dispatcher.connect(self.spider_close,signals.spider_closed)
11 
12     def spider_close(self,spider):
13         #爬虫退出的时候关闭Chrome
14         print("spider closed")
15         self.browser.quit()

把selenium集成到scrapy中主要改变的就是这两处地方。

以上的在scrapy中嵌入selenium的chrome并不是异步的,所以效率会变差。

这里都是部分代码,完整代码链接:https://github.com/pujinxiao/jobbole_spider

转至http://www.cnblogs.com/jinxiao-pu/p/6815845.html

转载于:https://www.cnblogs.com/qingsheng/p/9202530.html


http://www.niftyadmin.cn/n/798355.html

相关文章

hadoop集群内在所有节点执行某一命令的脚本

在hadoop集群内&#xff0c;为方便输入一次命令即可查看集群内所有设备状况&#xff0c;编写如下脚本。 作用&#xff1a;将在一个设备下&#xff0c;实现在所有设备下都执行同一命令。 脚本源码&#xff1a; #!/bin/bash pcount$# if((pcount<1));thenecho no args;exit…

JQuery获取字符串中的数字

var reg /\d/g; var str "grid30_r14_c5_value8.39"; var ms str.match(reg) alert(ms.join(,)) 转载于:https://www.cnblogs.com/zhangyong0908/p/9203126.html

Centos7.5下HDP集群搭建(一)

硬件环境&#xff1a;6台服务器&#xff0c;IP为172.16.172.17/18/19/20/21/22 软件环境&#xff1a;操作系统为Centos7.5 Ambari版本为2.5.0.3 HDP版本为2.6.0.3 一、安装前准备工作&#xff1a; 1.安装以下软件&#xff1a; yum,rpm,scp,curl,unzip,tar,wget,OpenSSL(v1.0…

编辑器之神:VIM 常用命令整理

VIM 常用命令整理1.最近被vim一些小命令卡住了&#xff0c;网上搜了一搜资料都是残缺不全的。立志整理出来一些&#xff0c;并以此来彻底让自己掌握vim常用命令&#xff0c;实践一下这款被称为编辑器之神的编辑器2. 本文将持续更新补充&#xff1b;学习建议&#xff1a;这种命令…

Centos7.5下HDP集群搭建(二)

二、本地仓库搭建(本地仓库为172.16.172.17服务器&#xff0c;以下操作都在这台设备上进行) 1.准备下载文件 a.Ambari 下载包&#xff1a;wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.5.0.3/ambari-2.5.0.3-centos7.tar.gz ambari.repo&#…

关于js(三)--什么layer中弹出层内容点击事件不起作用

1》》.click只能为页面现有的元素绑定点击事件&#xff0c;如果是动态生成的新的元素&#xff0c;是没有事件的2》》而$(document).on("click","指定的元素",function(){});方法则是将指定的事件绑定在document上&#xff0c;而新产生的元素如果符合指定的…

Centos7.5下HDP集群搭建(三)

三、安装ambari 1.安装ambari-server &#xff08;1&#xff09;在172.16.172.17下执行 yum install ambari-server. 直到看到Complete&#xff01;代表安装成功。 2.ambari-server setup &#xff08;1&#xff09;在172.16.172.17下执行ambari-server setup: 若没有关闭…

virtualbox虚拟机之连接本地主机同时可以连接外部网络

如果主机需要通过ssh&#xff0c;ftp等方式访问linux虚拟机&#xff0c;是无法实现的。这个时候要实现端口互通&#xff0c;我们要用到VirtualBox的端口转发功能。所谓的端口转发功能&#xff0c;就是借助主机上虚拟出来的VirtualBox Host-Only Network这块网卡的ip&#xff0c…