【问题标题】:How do I know which browser is used to crawl in Scrapy framework?在 Scrapy 框架中如何知道使用哪个浏览器进行爬取?
【发布时间】:2018-12-05 04:37:30
【问题描述】:

我的背景是什么:

  • 如您所知,Chrome、Firefox、Safari 上的网站 HTML 结构有很大不同。因此,当我使用 CSS-Selector 从 HTML 结构中获取元素标签中的数据时,有时该标签已在 Chrome 浏览器中具有,而另一个则没有。因此,我只想专注于一个浏览器以减少工作量。
  • 当我使用Scrapy框架从url爬取数据时,我不知道Scrapy会使用哪个浏览器来爬取数据。因此,我也不知道返回什么样的 HTML 响应体。我检查了响应,发现有时结构与从 Chrome 获取的结构相同,但有时却不是。 Scrapy 框架似乎使用了许多不同的网络浏览器来抓取数据。

我想要什么:

  • 我只想用 Chrome 浏览器抓取 Scrapy 框架中的数据
  • HTML 响应正文的结构必须从 Chrome 获取

我问什么:

  • 有没有人有任何想法或提示可以帮助我处理这个问题?
  • 我可以像 Selenium 那样在 Scrapy Framework 中配置 Webdriver 吗? (如果可能,请告诉我在哪里以及如何?)

谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow!请查看writing the perfect question 以帮助您提出一个好问题,从而得到一个好的答案。
  • 好的,谢谢,我会改进的。

标签: python selenium web-scraping scrapy web-crawler


【解决方案1】:

Scrapy 不使用浏览器,它解析静态 html,如 BeautifulSoup。如果你想解析动态页面(javascript生成)使用selenium,如果你愿意,你可以将页面源发送到Scrapy。

要设置 Scrapy 使用自定义用户代理 (Chrome),在 settings.py 添加

USER_AGENT = Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36

my_spider.py

class MySpider(scrapy.Spider):
    def start_requests(self):
        yield scrapy.Request(self.start_urls, callback=self.parse, headers={"User-Agent": "Your Custom User Agent"})

【讨论】:

  • 好答案+1。还有一件事,我们需要添加多个 User_Agent 以覆盖当我们使用该 User_Agent 太多次时服务器(我们正在抓取的)将限制我们的 User_Agent 的情况。
  • 只是创建随机用户代理或为请求添加延迟,做得太快有时会阻塞请求。
【解决方案2】:

你可以在你的设置文件中设置用户代理,像这样

USER_AGENT = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'

因此,对于 Web 服务器,请求看起来像是从 Chrome 生成的。

【讨论】:

  • 我试过了,但是没有用。 :'( 这里是我要抓取的网址:tripadvisor.com/… 这里是我的 USER_AGENT: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
  • 请发布您的完整代码。另外,当tripadivisor 是您要访问的服务器时,您怎么知道它不起作用?
  • 我知道通过使用 CSS-Selector 从 HTML 响应中的元素标记中获取数据,该元素标记在 chrome 中但在其他元素中没有。但是感谢您的回答,我想我找到了根本原因。我需要设置多个User_Agent,因为我第一次爬的时候是Chrome HTML响应,但是我用那个User_Agent尝试了很多次,然后服务器限制了我的User_Agent。这就是为什么我收到了另一个不是来自 Chrome 的回复。
  • 很有趣,虽然我发现应用程序会限制特定的用户代理请求很奇怪。如果有人决定劝阻刮板,他们通常会阻止请求,如果它来自刮板。通常浏览器的差异也不会改变 html 结构。所以,一般来说,如果你要报废数据,那么基于 html 结构的 xpath 会更有效。无论如何,祝你报废好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
相关资源
最近更新 更多