【问题标题】:Scraping the content of a box contains infinite scrolling in Python在 Python 中抓取框的内容包含无限滚动
【发布时间】:2017-03-09 17:53:09
【问题描述】:

我是 Python 和网络爬虫的新手。我打算在website 的头条新闻中抓取链接。我被告知要查看它的 Ajax 请求并发送类似的请求。问题是对链接的所有请求都是相同的:http://www.marketwatch.com/newsviewer/mktwheadlines 我的问题是如何从这样的无限滚动框中提取链接。我正在使用美丽的汤,但我认为它不适合这项任务。我也不熟悉 Selenium 和 java 脚本。我知道如何通过 Scrapy 抓取某些请求。

【问题讨论】:

    标签: python web-scraping scrapy infinite-scroll


    【解决方案1】:

    这确实是一个 AJAX 请求。如果您查看浏览器检查器中的网络选项卡:

    您可以看到它正在发出 POST 请求以下载文章的网址。
    除了 docid 和时间戳之外,这里的每个值都是不言自明的。 docid 似乎指示要为哪个框拉文章(页面上有多个框),它似乎是附加到 <li> 元素的 id 存储文章网址的元素。

    幸运的是,在这种情况下 POST 和 GET 是可以互换的。似乎也不需要时间戳参数。因此,您实际上可以在浏览器中查看结果,方法是右键单击检查器中的 url 并选择“使用参数复制位置”:

    http://www.marketwatch.com/newsviewer/mktwheadlines?blogs=true&commentary=true&docId=1275261016&premium=true&pullCount=100&pulse=true&rtheadlines=true&topic=All%20Topics&topstories=true&video=true

    这个例子去掉了timestamp参数,把pullCount增加到100,所以只要请求它,它就会返回100个文章url。

    您可以花更多的时间来逆向工程网站的运作方式以及每个关键字的用途,但这是一个好的开始。

    【讨论】:

    • 感谢 Granitosaurus 提供的非常有用的提示。我在我的谷歌浏览器中找不到检查员来获取您提到的网址。对不起,因为我是这个领域的新手。另外,我应该使用 Python 中的哪些包来获取无限滚动容器中的 URL?我可以将请求包与漂亮的汤结合起来还是有更好的解决方案?
    • 如果您使用的是scrapy,那么使用scrapy Requests 来处理请求,使用scrapy Selectors 来解析html。如果您不使用scrapy,那么 requests + beautiful soup 或 lxml 可以正常工作。关于检查工具,您应该能够使用 F12 或 ctrl+shift+c 访问它们。
    • 非常感谢。我可以在Chrome中获取开发工具并查看您的屏幕截图,但我不知道在哪里右键单击并选择“使用参数复制位置”以获取marketwatch.com/newsviewer/… :(
    • 我正在挖掘您的答案,这非常有帮助。你能告诉你是如何得到你在答案中发布的 URL 的吗?我没找到。
    • @farshidbalan 哦,抱歉回复晚了。不同的开发工具可能会有所不同,但通常您可以右键单击网络选项卡中的 url,它应该有几个不同的“复制”选项。
    猜你喜欢
    • 2020-05-30
    • 2015-05-06
    • 2015-07-18
    • 2012-09-13
    • 2023-03-08
    • 2016-09-09
    • 2022-08-19
    • 2014-05-07
    • 2012-10-31
    相关资源
    最近更新 更多