请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

把selenium集成到scrapy中间件(已在setting文件设置启动中间件),运行时却无法启动中间件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
具体代码如下
 
#中间件
from selenium import webdriver
from scrapy.http import HtmlResponse
import time
class ChromeMiddlewares(object):
    def process_request(cls,request,spider):
        if request.meta.has_key('Chrome'):
            driver=webdriver.Chrome()
            driver.get(request.url)
            driver.find_element_by_name('account').send_keys('13808847170')
            driver.find_element_by_name('password').send_keys('aa886688')
            time.sleep(7)
            driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/form/div[2]/button").click()
            time.sleep(7)
            for in range(3):
                driver.execute_script('window.scrollBy(0,3000)')
                time.sleep(5)
            content=driver.page_source
            driver.quit()
            filename='zhihu.html'
            with open(filename,'wb')as fp:
                fp.write(content.encode('utf-8'))
            return HtmlResponse(request.url,body=content,encoding='utf-8',request=request)
             
             
             
#spider文件
# -*- coding: utf-8 -*-
import scrapy
class TestmoniSpider(scrapy.Spider):
    name = "testmoni"
    allowed_domains = ["https://www.zhihu.com/"]
    start_urls = []
 
def start_requests(self):
    urls='https://www.zhihu.com/#signin'
    rq=scrapy.Request(url=urls,callback=self.parse)
    rq.meta['Chrome']=True
    yield rq
 
    def parse(self, response):#这个函数主要写解析
        print response.text
         
         
setting文件
DOWNLOADER_MIDDLEWARES={'testselenium.middlewares.ChromeMiddlewares':1,}


正在回答 回答被采纳积分+3

插入代码

1回答

bobby 2017-05-29 15:51:45

无法启动是什么问题, 是无法启动chrome还是无法进入process_request函数, 你有没有debug过

1 回复 有任何疑惑可以回复我~
  • 提问者 慕先生0421411 #1
    我debug过,是无法启动中间件,为了验证是不是无法启动chrome,又单独写了一个测试chrome的py,结果是chrome能正常启动运行的
    回复 有任何疑惑可以回复我~ 2017-05-29 17:46:01
  • bobby 回复 提问者 慕先生0421411 #2
    你的意思是无法进入到process_request 函数? 你试试将process_request函数改为def process_request(self, request, spider):
    回复 有任何疑惑可以回复我~ 2017-06-01 09:45:15
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号