2017-01-25 2 views
1

Я пытаюсь сменить сайт с помощью Scrapy and Selenium.Scrapy/Selenium - ответ не передается веб-браузеру

Я могу открыть веб-браузер с помощью селена, но я не могу получить начальный URL-адрес в веб-браузере. В настоящее время веб-браузер открывается, ничего не делает и затем закрывается, пока я получаю сообщение об ошибке « etc>: код статуса HTTP не обрабатывается или не разрешается».

Какой, насколько я понимаю, подтверждает, что я не могу передать URL-адрес веб-браузера.

Что я здесь делаю неправильно?

import scrapy 
import time 

from selenium import webdriver 
from glassdoor.items import GlassdoorItem 


class glassdoorSpider(scrapy.Spider): 
    name = "glassdoor" 
    allowed_domains = ["glassdoor.co.uk"] 

    start_urls = ["https://www.glassdoor.co.uk/Overview/Working-at-Greene-King-EI_IE10160.11,22.htm", 
    ] 

    def __init__(self): 
     self.driver = webdriver.Chrome("C:/Users/andrew/Downloads/chromedriver_win32/chromedriver.exe") 

    def parse(self, response): 
     self.driver.get(response.url) 
     time.sleep(5) 


     for sel in response.xpath('//*[@id="EmpStats"]'): 
      item = GlassdoorItem() 
      item['rating'] = sel.xpath('//*[@class="notranslate ratingNum"]/text()').extract() 
#   item['recommend'] = sel.xpath('//*[@class="address"]/text()').extract() 
#   item['approval'] = sel.xpath('//*[@class="address"]/text()').extract() 
      yield item 

#  self.driver.close() 

журналы, которые я получаю от выше:

2017-01-26 21:49:02 [scrapy] INFO: Scrapy 1.0.5 started (bot: glassdoor) 
2017-01-26 21:49:02 [scrapy] INFO: Optional features available: ssl, http11 
2017-01-26 21:49:02 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'glassdoor.spiders', 'SPIDER_MODULES': ['glassdoor.spiders'], 'BOT_NAME': 'glassdoor'} 
2017-01-26 21:49:02 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 
2017-01-26 21:49:04 [selenium.webdriver.remote.remote_connection] DEBUG: POST http://127.0.0.1:58378/session {"requiredCapabilities": {}, "desiredCapabilities": {"platform": "ANY", "browserName": "chrome", "version": "", "chromeOptions": {"args": [], "extensions": []}, "javascriptEnabled": true}} 
2017-01-26 21:49:06 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request 
2017-01-26 21:49:06 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2017-01-26 21:49:06 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2017-01-26 21:49:06 [scrapy] INFO: Enabled item pipelines: 
2017-01-26 21:49:06 [scrapy] INFO: Spider opened 
2017-01-26 21:49:06 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2017-01-26 21:49:06 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2017-01-26 21:49:07 [scrapy] DEBUG: Crawled (405) <GET https://www.glassdoor.co.uk/Overview/Working-at-Greene-King-EI_IE10160.11,22.htm> (referer: None) 
2017-01-26 21:49:07 [scrapy] DEBUG: Ignoring response <405 https://www.glassdoor.co.uk/Overview/Working-at-Greene-King-EI_IE10160.11,22.htm>: HTTP status code is not handled or not allowed 
2017-01-26 21:49:07 [scrapy] INFO: Closing spider (finished) 
2017-01-26 21:49:07 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 269, 
'downloader/request_count': 1, 
'downloader/request_method_count/GET': 1, 
'downloader/response_bytes': 7412, 
'downloader/response_count': 1, 
'downloader/response_status_count/405': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2017, 1, 26, 21, 49, 7, 388000), 
'log_count/DEBUG': 5, 
'log_count/INFO': 7, 
'response_received_count': 1, 
'scheduler/dequeued': 1, 
'scheduler/dequeued/memory': 1, 
'scheduler/enqueued': 1, 
'scheduler/enqueued/memory': 1, 
'start_time': datetime.datetime(2017, 1, 26, 21, 49, 6, 572000)} 
2017-01-26 21:49:07 [scrapy] INFO: Spider closed (finished) 
+0

и каково значение 'response.url', которое вы передаете в' parse() '? – Andersson

+0

@ Andersson i надеялся, что это будет первый URL-адрес в списке start_urls, который является «https://www.glassdoor.co.uk/Overview/Working-at-Greene-King-EI_IE10160.11,22.htm» – nevster

+0

Почему это должно быть так? :) Есть ли строка, в которой вы вызываете 'parse()' с этим аргументом? – Andersson

ответ

1

нормально, так как предполагают, на обоих ответов, я не проходил правильный ответ на селен.

Следовательно, путем добавления строки:

response1 = TextResponse(url=response.url, body=self.driver.page_source, encoding='utf-8') 

и, следовательно, если изменить одну строку кода, а также:

for sel in response1.xpath('//*[@id="EmpStats"]'): 

новый код (который работает):

import scrapy 
import time 

from selenium import webdriver 
from glassdoor.items import GlassdoorItem 


class glassdoorSpider(scrapy.Spider): 
    header = {"User-Agent":"Mozilla/5.0 Gecko/20100101 Firefox/33.0"} 
    name = "glassdoor" 
    allowed_domains = ["glassdoor.co.uk"] 

    start_urls = ["https://www.glassdoor.co.uk/Overview/Working-at-Greene-King-EI_IE10160.11,22.htm", 
    ] 

    def __init__(self): 
     self.driver = webdriver.Chrome("C:/Users/andrew/Downloads/chromedriver_win32/chromedriver.exe") 

    def parse(self, response): 
     self.driver.get(response.url) 
     response1 = TextResponse(url=response.url, body=self.driver.page_source, encoding='utf-8') 
     time.sleep(5) 


     for sel in response1.xpath('//*[@id="EmpStats"]'): 
      item = GlassdoorItem() 
      item['rating'] = sel.xpath('//*[@class="notranslate ratingNum"]/text()').extract() 
#   item['recommend'] = sel.xpath('//*[@class="address"]/text()').extract() 
#   item['approval'] = sel.xpath('//*[@class="address"]/text()').extract() 
      yield item 

#  self.driver.close() 
Смежные вопросы