首先要先在spider对象实例化时,同时实例化一个浏览器对象

# -*- coding: utf-8 -*-
import scrapy
from selenium import webdriver """
Scrapy 使用 selenium
1.在spider的构造方法中实例化一个浏览器对象
2.重写spider下的closed方法,该方法用来关闭浏览器
3.在下载中间件的process_response方法中使用selenium,通过spider参数获取浏览器对象
4.在中间件中使用selenium对网站进行信息抓取
5.实例化一个HtmlResponse对象,且将page_source封装到HtmlResponse对象中
6.返回该新的相应对象
7.在parse函数中对新的response对象进行解析.
""" class NewsSpider(scrapy.Spider):
name = 'news'
# allowed_domains = ['www.xxx.com']
start_urls = ['http://war.163.com/'] # 在实例化Spider对象时创建一个新的浏览器对象
def __init__(self):
self.bro = webdriver.Chrome(executable_path=r'F:\爬虫\chromedriver.exe') def parse(self, response):
div_list = response.xpath('//div[@class="data_row news_article clearfix "]')
for div in div_list:
title = div.xpath('.//div[@class="news_title"]/h3/a/text()').extract_first()
print(title) # 爬虫关闭后的执行的函数
def closed(self,spider):
print('关闭浏览器')
self.bro.quit()

在下载中间中修改process_response方法

    def process_response(self, request, response, spider):
# Called with the response returned from the downloader. # Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest # 在此处使用已经实例化好的浏览器对象.
bro = spider.bro
bro.get(url=request.url)
sleep(3)
page_text = bro.page_source
sleep(3) # 返回新的response对象
return HtmlResponse(url=bro.current_url, body=page_text, encoding='utf-8', request=request)

最新文章

  1. webpack+react+antd 单页面应用实例
  2. css响应式布局RWD
  3. python __file__ 与相对路径
  4. JavaScript - 倒计时
  5. wsdl 结构
  6. Mysql函数FIND_IN_SET()的使用方法
  7. C++的XML编程经验――LIBXML2库使用指南[转]
  8. [NYOJ 43] 24 Point game
  9. JavaScript 判断一个字符串是否在另一个字符串中
  10. 下载安装ActiveMQ(消息队列)
  11. iOS日历中给一个事件加入多个提醒
  12. 【HDU1695】GCD(莫比乌斯反演)
  13. MyBatis(2)——MyBatis 深入学习
  14. react文档demo实现输入展示搜索结果列表
  15. 2017第45周一java多线程创建方法
  16. py requests.post2
  17. 国外某牛人的JsonModelBinder 实现 MVC 3.0
  18. idea springboot应用启动
  19. Launcher代码大全
  20. LINUX 下编译不通过解答

热门文章

  1. CentOS7 安装 Docker CE步骤
  2. Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法
  3. 移动端尺寸新写法-rem
  4. ios真机测试问题
  5. 在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法
  6. CTF<密码学> writeup 传统知识+古典密码
  7. QueryRunner(DBUtils) 结果集实例
  8. element-ui日期组件DatePicker选择日期范围赋值编辑问题
  9. linux 安装python
  10. Java 网络通信相关