我怎么知道在Scrapy框架中使用哪种浏览器进行爬网?

时间:2018-12-05 04:37:31

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

我的背景是什么

  • 您知道,Chrome,Firefox,Safari上的网站HTML结构完全不同。因此,当我使用CSS-Selector从HTML结构中的元素标签中获取数据时,有时Chrome浏览器已经具有该标签,而另一个标签却没有。因此,我只想只关注一种浏览器以减少工作量。
  • 当我使用Scrapy框架从URL爬网数据时,我不知道Scrapy将使用哪种浏览器来爬网数据。因此,我也不知道将返回哪种HTML响应主体。我检查了响应,发现有时结构与从Chrome浏览器获取的结构相同,但有时并非如此。似乎Scrapy框架使用了许多不同的Web浏览器来爬网数据。

我想要什么:

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

我要问的是

  • 有人有什么想法或提示可以帮助我解决该问题吗?
  • 我可以像Selenium一样在Scrapy Framework中配置Webdriver吗? (如果可能,请告诉我在哪里以及如何做?)

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在设置文件中设置用户代理,类似这样

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'

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

答案 1 :(得分:0)

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"})