我想从最近的比赛刮桥网站的一些结果。我已发布关于此here的上一个问题。感谢@alecxe,我得到了刮板登录,同时使用PhantomJS
在页面上呈现一些JavaScript。传递cookies后续请求中CrawlSpider
我如何理解这个工作原理是,我登录时使用selenium
,保存在cookie中的凭据,然后该cookie传递给普通CrawlSpider
得到认证完成,从而绕过问题与InitSpider
。这对于初始登录页面可以正常工作,但是一旦抓取工具转到由Rule
定义的下一页,该网站就会将我踢出去。它只是再次登录页面。
为了解决这个问题,我想保存在一个全局变量的饼干和压倒一切的make_requests_from_url()
到cookie传递给所有后续请求蜘蛛做。但它仍然返回登录页面的主体。
问:这到底是怎么回事呢?我从什么地方听说,一旦你通过cookie来start_requests()
那么该cookie应该持续的CrawlSpider
会话的其余部分。但显然不这样做。任何人都可以启发我,我可以看到Scrapy如何处理这个问题?
我的代码:
import scrapy
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request, HtmlResponse
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BboSpider(scrapy.spiders.CrawlSpider):
name = "bbo"
allowed_domains = ["bridgebase.com"]
login_page = "http://www.bridgebase.com/myhands/myhands_login.php?t=%2Fmyhands%2Findex.php%3F"
def start_requests(self):
global bbo_cookies
driver = webdriver.PhantomJS()
driver.get(self.login_page)
driver.find_element_by_id("username").send_keys("_____")
driver.find_element_by_id("password").send_keys("_____")
driver.find_element_by_name("submit").click()
driver.save_screenshot("test.png")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.LINK_TEXT, "Click here for results of recent tournaments")))
bbo_cookies = driver.get_cookies()
driver.close()
yield Request("http://webutil.bridgebase.com/v2/tarchive.php?m=h&h=acbl&d=ACBL&o=acbh", cookies=bbo_cookies)
def make_requests_from_url(self, url):
request = super(BboSpider, self).make_requests_from_url(url)
request.cookies = bbo_cookies
return request
rules = [
Rule(LinkExtractor(allow=r'tourney=4796-1455303720-'), callback='parse_item', follow=True),
]
def parse_item(self, response):
print(response.body)
日志的准系统相关部分(现在)没有显示太有趣了。如有必要,我可以提供更多细节。
2016-02-13 09:31:04 [scrapy] INFO: Enabled item pipelines:
[]
2016-02-13 09:31:04 [scrapy] INFO: Spider opened
2016-02-13 09:31:04 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
[... bunch of Selenium messages ...]
2016-02-13 09:31:13 [scrapy] DEBUG: Crawled (200) <GET http://webutil.bridgebase.com/v2/tarchive.php?m=h&h=acbl&d=ACBL&o=acbh> (referer: None)
[... more Selenium messages ...]
2016-02-13 09:31:16 [scrapy] DEBUG: Crawled (200) <GET http://www.bridgebase.com/myhands/hands.php?tourney=4796-1455303720-> (referer: http://webutil.bridgebase.com/v2/tarchive.php?m=h&h=acbl&d=ACBL&o=acbh)
2016-02-13 09:31:17 [scrapy] INFO: Closing spider (finished)
2016-02-13 09:31:17 [scrapy] INFO: Dumping Scrapy stats:
显然,我不理解scrapy的工作原理。
看起来不错!会推荐一些语法编辑,但欢迎来到Stackoverflow,享受您的住宿:D –
@ penne12 LMAO!谢谢?它只有2年才能欣赏所以我工作在我的英语 – scriptso
@ penne12我没有看到任何参考堆栈溢出和谷歌翻译标签块通过一个职位....会很棒,可能让我不看iliterate – scriptso