【问题标题】:How can I scrape a site with multiple pages using beautifulsoup and python?如何使用 Beautifulsoup 和 python 抓取具有多个页面的网站?
【发布时间】:2018-02-21 01:20:38
【问题描述】:

我正在尝试抓取一个网站。这是这个的延续 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>

鉴于页面数量每天都在变化,我如何抓取网站中的所有页面? 顺便说一下,页面 url 不会随着页面的变化而变化。

【问题讨论】:

  • 是否可以显示该站点的链接以获得及时回复,可能有解决方法?

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


【解决方案1】:

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

在我使用的 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` 

我希望这对某些人有所帮助,或者有助于满足您的需求。

【讨论】:

  • 我已经尝试编辑了两次,但无法弄清楚如何处理堆栈溢出编码部分。
【解决方案2】:

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

现在使用 chrome 和 firefox headless 的情况好多了。

【讨论】:

    【解决方案3】:

    我将学习如何使用 Selenium——它在处理 BS4 无法胜任的情况时既简单又有效。

    您可以使用它来登录网站、在搜索框中输入关键字以及单击屏幕上的按钮。更不用说,您可以使用浏览器观看它的运行情况。

    即使我在 BS4 中做某事时,我也会使用它来更好地监控抓取项目的进度。

    【讨论】:

      【解决方案4】:
      1. BS4不会随时解决这个问题,因为它不能运行Js
      2. 首先,你可以尝试使用 Scrapy 和这个answer
      3. 你可以使用 Selenium 来实现它

      【讨论】:

        猜你喜欢
        • 2020-11-07
        • 2014-12-17
        • 1970-01-01
        • 2019-11-16
        • 2017-01-07
        • 1970-01-01
        • 2023-03-20
        • 2018-05-31
        • 1970-01-01
        相关资源
        最近更新 更多