Selenium 即使使用硒,瘙痒也会被阻断;硒本身不是吗?
我正试图从网站上搜集数据。Scrapy本身不起作用,我得到了HTTP 403,这让我相信有一些基于UI的对策,例如检查分辨率 然后我尝试硒;一个非常基本的脚本在网站上点击就可以了。以下是有效方法的相关摘录:Selenium 即使使用硒,瘙痒也会被阻断;硒本身不是吗?,selenium,web-scraping,scrapy,http-status-code-403,Selenium,Web Scraping,Scrapy,Http Status Code 403,我正试图从网站上搜集数据。Scrapy本身不起作用,我得到了HTTP 403,这让我相信有一些基于UI的对策,例如检查分辨率 然后我尝试硒;一个非常基本的脚本在网站上点击就可以了。以下是有效方法的相关摘录: driver.get(start_url) try: link_next = driver.wait.until(EC.presence_of_element_located( (By.XPATH, '//a[contains(.,"Next")]'))) link_next
driver.get(start_url)
try:
link_next = driver.wait.until(EC.presence_of_element_located(
(By.XPATH, '//a[contains(.,"Next")]')))
link_next.click()
现在,为了存储数据,我仍然需要Scrapy。所以我写了一个结合了Scrapy和Selenium的脚本
class MyClass(CrawlSpider):
...
start_urls = [
"domainiwanttocrawl.com?page=1",
]
def __init__(self):
self.driver = webdriver.Firefox()
self.driver.wait = WebDriverWait(self.driver, 2)
def parse(self, response):
self.driver.get(response.url)
while True:
try:
link_next = self.driver.wait.until(EC.presence_of_element_located((By.XPATH, '//a[contains(.,"Next")]')))
self.driver.wait = WebDriverWait(self.driver, 2)
link_next.click()
item = MyItem()
item['source_url'] = response.url
item['myitem'] = ...
return item
except:
break
self.driver.close()
但这也只会导致HTTP403。如果我将self.driver.geturl之类的东西添加到uuu init_uuuuu方法中,这将起作用,但除此之外什么都没有
因此,本质上:Selenium get函数继续工作,而Scrapy在start_URL中所做的任何事情都会被阻止。但是我不知道如何在没有起始URL的情况下启动爬行。不知怎么的,Scrapy和Selenium似乎还没有真正整合起来
知道为什么吗?我能做什么吗?Scrapy是一个非常棒的刮削框架,你可以免费获得大量的东西。而且,如果它直接把403从大门里拿出来,那么它基本上是完全不能工作的 硒没有击中403,你会得到正常的反应。这太棒了,但不是因为硒是答案;Scrapy仍然死在水里,这是工作马 事实上,硒是有效的,这意味着你用一些简单的方法很可能会感到发痒。你的问题中没有足够的细节,但是下面的链接是一个很好的开始 我推荐的路线是花点时间弄清楚如何通过403。硒是伟大的,所有,但刮痧是神像当谈到网络刮削。如果运气好的话,不会花太多时间 下面是一个可能有用的util:它可以用来从大约2014年流行的用户代理列表中获取随机用户代理 >>>对于范围5中的uu: ... 打印代理。获取代理 ... Mozilla/5.0 Macintosh;英特尔Mac OS X 10_9_4 AppleWebKit/537.36 KHTML,如Gecko Chrome/36.0.1985.125 Safari/537.36 Mozilla/5.0 Macintosh;英特尔Mac OS X 10_9_4 AppleWebKit/537.36 KHTML,如Gecko Chrome/36.0.1985.125 Safari/537.36 Mozilla/5.0 Windows NT 6.1;WOW64 AppleWebKit/537.36 KHTML,如Gecko Chrome/36.0.1985.125 Safari/537.36 Mozilla/5.0 iPhone;CPU iPhone OS 7_1_2,如Mac OS X AppleWebKit/537.51.2 KHTML,如Gecko Version/7.0 Mobile/11D257 Safari/9537.53 Mozilla/5.0 Windows NT 6.3;WOW64;rv:31.0 Gecko/20100101 Firefox/31.0 下面是将get_代理与Scrapy集成的基本方法。它没有经过测试,但应该为您指明正确的方向 进口羊瘙痒 从scrapy.http导入请求 从代理导入获取代理 示例http://www.example.com' def get_请求URL: 标题={ “用户代理”:获取\u代理, “Referer”:https://www.google.com/' } returnrequesturl,headers=headers 类MySpiderscrapy.Spider: name='myspider' def start_请求自身: 生成get\u请求示例\u URL 编辑
关于用户代理,看起来这可能实现相同的功能,但更容易实现:Scrapy和Selenium确实没有集成。Scrapy是用来做自己的HTTP请求的。如果您在Scrapy spider方法中执行Selenium调用,它将不会自动将它们转换为Scrapy响应实例。因此,无论是在开始的URL将通过Scrapy的下载程序,而不是通过Selenium,因此显示相同的403。谢谢。但是我如何集成它们,以便与服务器的任何交互都将通过Selenium进行?或者这是不可能的?