Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中发送json请求后在页面中加载更多链接_Python_Json_Beautifulsoup_Infinite Scroll - Fatal编程技术网

在Python中发送json请求后在页面中加载更多链接

在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'

我正在解析它以从一个带有无限滚动条的框中获取链接。以下是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'
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
  • 获取最后一个json文件,提取最后一项中键
    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
    
  • 获取最后一个json文件,提取最后一项中键
    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