如何使用beautifulsoup和python抓取多个页面的网站?

时间:2017-09-12 14:13:05

标签: python html web-scraping beautifulsoup page-numbering

我正在试图抓一个网站。这是对此的延续 soup.findAll is not working for table

我能够获得所需的数据,但该网站有多个页面,这些页面因日而异。有些日子,它可能是20页,另一页是33页。我试图通过获取最后一页元素How to scrape the next pages in python using Beautifulsoup来实现此解决方案 但当我到网站上的寻呼机div我想要刮,我找到了这种格式

   <a class="ctl00_cph1_mnuPager_1" href="javascript:__doPostBack('ctl00$cph1$mnuPager','32')">32</a>
   <a class="ctl00_cph1_mnuPager_1">33</a>

如果页面的数量每天都在变化,我如何刮取网站中的所有页面? 顺便说一句,页面网址不随页面更改而改变。

4 个答案:

答案 0 :(得分:0)

  1. BS4不会随时解决此问题,因为它无法运行Js
  2. 首先,您可以尝试使用Scrapy和answer
  3. 您可以使用Selenium

答案 1 :(得分:0)

我将学习如何使用Selenium - 它在处理BS4无法完成工作的情况下简单有效。

您可以使用它登录网站,在搜索框中输入密钥,然后点击屏幕上的按钮。更不用说,你可以通过浏览器观察它正在做什么。

即使我在BS4中做了一些事情来监控抓取项目的进展,我也会使用它。

答案 2 :(得分:0)

就像有些人提到过的,你可能想看看硒。我写了一篇博文来做这样的事情:http://danielfrg.com/blog/2015/09/28/crawling-python-selenium-docker/

现在使用chrome和firefox无头的东西要好得多。

答案 3 :(得分:0)

好的,如果我没理解错的话,您要抓取的页面数量是不确定的?如果是这种情况,我也有类似的问题。查看检查的页面,看看是否有元素不存在但存在于有内容的页面上。

在我的 for 循环中使用

`pages = list(map(str, range(1, 5000))) /5000 只是一个很大的数字 搜索不会达到那么高。

对于 n 页: base_url = '这里的网址' url = base_url + n /n 是我的url末尾的页数

/this is the element that didn't exist after the pages with content finished
figure = soup.find_all("figure")
if figure:
pass
else:
break /would break out of the page iterations and jump to my other listing in 
       another url after there wasn't any content left on the last page` 

我希望这对某些人有所帮助,或者有助于涵盖您所需要的内容。