在Python中发送json请求后在页面中加载更多链接
我正在解析它以从一个带有无限滚动条的框中获取链接。以下是mo代码,用于发送网站获取下一个10个链接的请求:在Python中发送json请求后在页面中加载更多链接,python,json,beautifulsoup,infinite-scroll,Python,Json,Beautifulsoup,Infinite Scroll,我正在解析它以从一个带有无限滚动条的框中获取链接。以下是mo代码,用于发送网站获取下一个10个链接的请求: import requests from bs4 import BeautifulSoup import urllib2 import urllib import extraction import json from json2html import * baseUrl = 'http://www.marketwatch.com/news/headline/getheadlines'
import requests
from bs4 import BeautifulSoup
import urllib2
import urllib
import extraction
import json
from json2html import *
baseUrl = 'http://www.marketwatch.com/news/headline/getheadlines'
parameters2 = {
'ticker':'XOM',
'countryCode':'US',
'docType':'2007',
'sequence':'6e09aca3-7207-446e-bb8a-db1a4ea6545c',
'messageNumber':'1830',
'count':'10',
'channelName':'',
'topic':' ',
'_':'1479539628362'}
html2 = requests.get(baseUrl, params = parameters2)
html3 = json.loads(html2.text) # array of size 10
在相应的HTML中,有如下元素:
<li class="loading">Loading more headlines...</li>
然后检查是否有更多的链接需要刮取,获取下一个json文件:
loadingMore = pressReleaseBox.find('li',attrs={'class':'loading'})
while loadingMore != None:
# get the links from json file and load more links
我不知道如何实现评论部分。你知道这件事吗?
我没有义务使用BeautifulSoup,任何其他工作库都可以 以下是如何加载更多json文件:
loadingMore = pressReleaseBox.find('li',attrs={'class':'loading'})
while loadingMore != None:
# get the links from json file and load more links
UniqueId
的值。
e5a00f51-8821-4fbc-8ac6-e5f64b5eb0f2:8499
e5a00f51-8821-4fbc-8ac6-e5f64b5eb0f2
as序列
8499
提取为messageNumber
docId
为空1222712881
序列
为空messageNumber
为空1222712881
为docId
sequence
、messageNumber
、docId
放入参数2中requests.get(baseUrl,params=parameters2)
获取下一个json文件以下是如何加载更多json文件:
loadingMore = pressReleaseBox.find('li',attrs={'class':'loading'})
while loadingMore != None:
# get the links from json file and load more links
UniqueId
的值。
e5a00f51-8821-4fbc-8ac6-e5f64b5eb0f2:8499
e5a00f51-8821-4fbc-8ac6-e5f64b5eb0f2
as序列
8499
提取为messageNumber
docId
为空1222712881
序列
为空messageNumber
为空1222712881
为docId
sequence
、messageNumber
、docId
放入参数2中requests.get(baseUrl,params=parameters2)
获取下一个json文件我会做另一种方法:打开网站,打开浏览器的开发工具,切换到“网络”选项卡,然后在页面上向下滚动,直到加载更多标题。查看devtool的“网络”选项卡,您将看到一些对其他URL的请求。您可以使用该URL的日期/时间参数来检索标题,它将显示为JSON(比HTML更容易解析)。感谢U chrki,这似乎是一个有趣的选择,但我不知道如何使用日期/时间来抓取数据,因为每个新闻滚动页面的“messageNumber”都会发生变化,并且会按“count”倒计时:“10”. 如果我获得了3年的数据,我就完成了,你的想法很好,但是你能指导我如何实现它吗?即使我删除了日期/时间参数,json文件也不会更改!!!基本上:检索JSON文件,查找最早的日期和时间,并将该日期和时间插入到第二个请求中。然后一遍又一遍地重复,直到你达到你所需要的极限。您还可以将URL中的
&count=
参数更改为更高的值,例如100,以便一次检索更多新闻。我以后可能会看一看。编辑:或更改其他参数之一,则更改日期不起任何作用。有人发布了一个答案。谢谢你,chrki,我将实施这个答案,并采纳你的建议。我会采取另一种方法:打开网站,打开浏览器的开发工具,切换到“网络”选项卡,然后在页面上向下滚动,直到加载更多标题。查看devtool的“网络”选项卡,您将看到一些对其他URL的请求。您可以使用该URL的日期/时间参数来检索标题,它将显示为JSON(比HTML更容易解析)。感谢U chrki,这似乎是一个有趣的选择,但我不知道如何使用日期/时间来抓取数据,因为每个新闻滚动页面的“messageNumber”都会发生变化,并且会按“count”倒计时:“10”. 如果我获得了3年的数据,我就完成了,你的想法很好,但是你能指导我如何实现它吗?即使我删除了日期/时间参数,json文件也不会更改!!!基本上:检索JSON文件,查找最早的日期和时间,并将该日期和时间插入到第二个请求中。然后一遍又一遍地重复,直到你达到你所需要的极限。您还可以将URL中的&count=
参数更改为更高的值,例如100,以便一次检索更多新闻。我以后可能会看一看。编辑:或更改其他参数之一,则更改日期不起任何作用。有人发布了一个答案。谢谢你,chrki,我将实施这个答案,并接受你的回复advice@Anyanyn:非常感谢,它似乎工作得很好,我将实现它。我遵循您的明确提示,得到了第一个json文件,但问题是,当我更改docId、messagNumber或任何其他键时,输出完全相同,我无法发送下一个获取新链接的请求。我做错了什么吗?@farshidbalan在HTML页面中,有
节点包含数据uniqueid
属性。它的值来自UniqueId
,因此提取它的值以初始化sequence
和messageNumber
,或docId
。并将channelName
设置为/news/latest/company/us/xom
。我已经成功地获取了json文件,如果您仍然无法获取,请向我索取代码。@Anyany:我非常感谢您的帮助。多亏了您的帮助,我可以通过更改messageNumber来获得下一个json。在4个请求之后,所有请求仅使用docId。我是编程新手,我不知道在发送第一个json(带有docId)并得到响应后,如何提取ne