如何从中删除1000条新闻https://inshorts.com/en/read数据使用靓汤

2024-06-24 13:33:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以取消头版,但我必须点击加载更多按钮,以显示更多的新闻。我想加载更多的按钮,以自动按下和废料的数据使用美丽的汤。 当按下“加载更多”按钮时,会执行下面的函数,但我不知道为什么在这里使用min\u news\u id=“dyjo71t1-1”,而且站点也是https://inshorts.com/,那么为什么在.post函数中使用/en/ajax/more\u news,以及当我键入https://inshorts.com/anytext时,相同的站点会像键入https://inshorts.com/https://inshorts.com/en/ajax/more_news一样打开,为什么会这样。你知道吗

var min_news_id = "dyjo71t1-1";
    function loadMoreNews(){
      $("#load-more-btn").hide();
      $("#load-more-gif").show();
      $.post("/en/ajax/more_news",{'category':'','news_offset':min_news_id},function(data){
          data = JSON.parse(data);
          min_news_id = data.min_news_id||min_news_id;
          $(".card-stack").append(data.html);
      })
      .fail(function(){alert("Error : unable to load more news");})
      .always(function(){$("#load-more-btn").show();$("#load-more-gif").hide();});
    }
    jQuery.scrollDepth();

Tags: 函数httpscomiddatamoreloadajax
1条回答
网友
1楼 · 发布于 2024-06-24 13:33:53

它使用JavaScript从https://inshorts.com/en/ajax/more_news加载更多的数据,使用带有参数'news_offset'POST请求通知服务器它必须向客户端发送什么消息。你知道吗

在第一页上,您可以从HTML获取此参数

start = r.text.find('var min_news_id = "')
start += len('var min_news_id = "')

end = r.text.find('";', start)
end -= len('";')

news_offset = r.text[start:end]
print('news_offset:', news_offset)

然后可以使用此参数发出POST请求,以获取JSON格式的新数据

    params = {'news_offset': news_offset}

    r = requests.post('https://inshorts.com/en/ajax/more_news', data=params)

    data = r.json()

在JSON中,data['html']data['min_news_id']中有HTML用于下一页。你知道吗


在这个例子中,我使用for-loop在几页之后停止,但是您可以使用while True:来获取更多的页。你知道吗

import requests
from bs4 import BeautifulSoup as BS

#  - first page  -

r = requests.get('https://inshorts.com/en/read')
soup = BS(r.text, 'html.parser')

for item in soup.find_all('span', {'itemprop': 'headline'}):
    print(item.get_text(strip=True))
    print(' -')

# searching "news_offset" in HTML

start = r.text.find('var min_news_id = "')
start += len('var min_news_id = "')

end = r.text.find('";', start)
end -= len('";')

news_offset = r.text[start:end]
print('news_offset:', news_offset)

#  - next pages  -

#while True:
for _ in range(3):

    params = {'news_offset': news_offset}

    r = requests.post('https://inshorts.com/en/ajax/more_news', data=params)
    data = r.json()

    soup = BS(data['html'], 'html.parser')

    for item in soup.find_all('span', {'itemprop': 'headline'}):
        print(item.get_text(strip=True))
        print(' -')

    # getting "news_offset" from JSON

    news_offset = data['min_news_id']
    print('news_offset:', news_offset)

相关问题 更多 >