我想抓取數據從一個頁面有很多AJAX調用和JavaScript執行呈現網頁。所以我想用硒與scrapy做到這一點。作案手法如下:Scrapy與硒爲一個網頁需要認證
添加的登錄頁面URL到scrapy start_urls列表
從應對方法使用formrequest後的用戶名和密碼即可進行身份驗證。
- 一旦登錄,請求所需頁面被刮取
- 將此響應傳遞給Selenium Webdriver以單擊頁面上的按鈕。
- 單擊按鈕並呈現新網頁後,捕獲結果。
,我有迄今的代碼如下:
from scrapy.spider import BaseSpider
from scrapy.http import FormRequest, Request
from selenium import webdriver
import time
class LoginSpider(BaseSpider):
name = "sel_spid"
start_urls = ["http://www.example.com/login.aspx"]
def __init__(self):
self.driver = webdriver.Firefox()
def parse(self, response):
return FormRequest.from_response(response,
formdata={'User': 'username', 'Pass': 'password'},
callback=self.check_login_response)
def check_login_response(self, response):
if "Log Out" in response.body:
self.log("Successfully logged in")
scrape_url = "http://www.example.com/authen_handler.aspx?SearchString=DWT+%3E%3d+500"
yield Request(url=scrape_url, callback=self.parse_page)
else:
self.log("Bad credentials")
def parse_page(self, response):
self.driver.get(response.url)
next = self.driver.find_element_by_class_name('dxWeb_pNext')
next.click()
time.sleep(2)
# capture the html and store in a file
的2個路障我擊中至今是:
第4步不work.Whenever硒開放Firefox的窗口,它總是在登錄屏幕上,並不知道如何超越它。
我不知道該如何實現第5步
任何幫助,將不勝感激
從理論上講,你可以通過scrapy響應餅乾和'add_cookie'方法的驅動程序,請參見:HTTP ://stackoverflow.com/questions/16563073/how-to-pass-scrapy-login-cookies-to-selenium和http://stackoverflow.com/questions/19082248/python-selenium-rc-create-cookie。但是,爲什麼不像Eric所說的那樣使用'selenium'登錄?謝謝。 – alecxe 2015-02-10 01:02:16
我可以做到這一點,但我不想失去在scrapy引擎蓋下運行的令人敬畏的扭曲代碼。我計劃在我通過身份驗證並且希望以非阻塞的方式進行操作時抓取大量URL。 。我的思維錯誤? – Amistad 2015-02-10 04:12:19