【问题标题】:Organizing my BeautifulSoup4 web scraping组织我的 BeautifulSoup4 网页抓取
【发布时间】:2017-05-08 20:27:33
【问题描述】:

对于编程来说还是很新的,尤其是 Python。我一直在为 Kickstarter 页面制作网络爬虫。我一直在一个页面上从每个项目中获取所有信息,但是我一直这样做的方式相对杂乱无章。我想让这个刮板获取第一个项目,抓取数据,追加,然后转到下一个,但它被设置为从页面中抓取所有目标数据,只是希望它与最后正确的项目。

(任何好奇的人的链接:https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=0&sort=newest&seed=2479798&page=1

现在,我从每个数据中获取了更多数据,而不仅仅是简介和指向每个数据的链接,但下面是我一直在做的一些示例代码。 BeautifulSoup 有点令人困惑,因为我相信它将事物转换为不同的数据类型的方式,在我未经训练的眼中,这使得将 .find_next() 类型的东西串在一起变得更加困难。尤其是 Kickstarter,这些项目按每行 4 个项目组织。

关于如何实现它的任何想法:查找第一个项目 -> 抓取 -> 附加数组 -> 重复下一个项目?

pageGrab = BeautifulSoup(requests.get(url).content, "html.parser")

link_array = []
blurb_array = []

links = pageGrab.select('.project-title a')
blurb = pageGrab.select('.project-blurb')

for link in links:
    rel_path = link.get('href')
    path = urljoin(base_url, rel_path)
    link_array.append(path)

for row in blurb:
    blurb_array.append(row.string.strip())

从这里开始,我将这些数组传递到 Pandas 数据框中,该数据框写入 Excel 文件。我为自己感到非常自豪,因为这是一项乏味的工作,但这是我的第一个有用的程序/脚本!

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    我建议您选择每个项目的“卡片”,其中有“项目”类:

    pageGrab.select( '.project' )
    

    select 方法还返回一个“汤”,然后可以对其进行搜索。例如,要查找项目的标题:

    <project soup>.select_one('.project-title > a' ).contents[0]
    

    选择包含在标题中的链接元素,类为project-title, contents 属性获取实际文本(出于某种原因在列表中)。有关这些方法的更多信息,请参阅the docs

    例如,要获取第一个项目的名称,您可以这样做

    pageGrab.select( '.project' )[0].select_one('.project-title > a' ).contents[0]
    

    因此,您可以遍历所有项目“卡片”并根据需要收集信息。

    我不确定您这样做是否是为了学习一般的网络抓取,但如果您尝试制作一个合适的应用程序,我建议您改用 JSON 数据,这样更容易操作。 您只需在页面 URL 的末尾添加 .json 即可从 Kickstarter 页面获取:

    https://www.kickstarter.com/discover/advanced.json?category_id=16&woe_id=0&sort=newest&seed=2479798&page=1

    请记住,他们将来可能会删除它,而且没有多少网站以这种方式提供 API

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2020-09-26
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多