Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 即使使用硒,瘙痒也会被阻断;硒本身不是吗?_Selenium_Web Scraping_Scrapy_Http Status Code 403 - Fatal编程技术网

Selenium 即使使用硒,瘙痒也会被阻断;硒本身不是吗?

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

我正试图从网站上搜集数据。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.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进行?或者这是不可能的?