我正在使用Python从一个网站上抓取内容。首先,我在Python上使用了BeautifulSoup
和Mechanize
,但是我看到这个网站有一个通过JavaScript创建内容的按钮,所以我决定使用Selenium
。
既然我可以通过像driver.find_element_by_xpath
这样的方法找到元素并使用硒来获取它们的内容,那么当我可以对所有东西使用硒时,为什么要使用BeautifulSoup
?
在这个特殊的例子中,我需要使用Selenium来点击JavaScript按钮,那么使用Selenium来解析是更好呢,还是同时使用Selenium和Beautiful Soup呢?
我用硒来刮网,但它不是快乐的解决方案。在上一个项目中,我使用了https://github.com/chromedp/chromedp。它是比硒更简单的溶液。
我建议使用Selenium来处理诸如与web页面交互之类的事情,不管它是在一个成熟的浏览器中,还是在一个无头模式的浏览器中,比如无头Chrome。我还想说,beautifuldsoup更适合于观察和编写依赖于元素是否找到或找到了什么的语句,然后使用selenium在用户需要时执行与页面的交互任务。
在直接回答您的问题之前,值得一提的是:如果您需要做的只是从静态HTML页面中提取内容,那么您可能应该使用HTTP库(比如Requests或内置的^{} )和^{} 或^{} ,而不是Selenium(尽管Selenium可能也足够)。不用硒的好处是:
requests
时设置异常逻辑的简单重试更令人恼火。请注意,需要cookies才能运行的站点并不是破坏Selenium的原因-您可以轻松创建一个URL打开函数,该函数使用cookielib/cookiejar神奇地设置和发送带有HTTP请求的cookies。
好吧,那你为什么要考虑用硒呢?几乎完全是为了处理这样一种情况:您想要抓取的内容是通过JavaScript添加到页面中的,而不是烘焙到HTML中的。即使这样,你也可以在不破坏重型机器的情况下得到你想要的数据。通常,以下情况之一适用:
如果您使用Selenium来决定您的情况的优点,请在headless模式下使用它,该模式至少由Firefox和Chrome驱动程序支持。Web spidering通常不需要实际以图形方式呈现页面,也不需要使用任何特定于浏览器的特性或特性,因此无头浏览器(其较低的CPU和内存成本以及更少的要崩溃或挂起的移动部件)是理想的。
相关问题 更多 >
编程相关推荐