如何为未按数字顺序排列的页面收集URL链接



当URL按数字顺序排序时,很容易获取给定网站中的所有文章。

然而,当我们有这样的网站https://mongolia.mid.ru/en_US/novosti有类似的URL的文章

https://mongolia.mid.ru/en_US/novosti/-/asset_publisher/hfCjAfLBKGW0/content/10-iula-sostoalas-vstreca-crezvycajnogo-i-polnomocnogo-posla-rossijskoj-federacii-v-mongolii-i-k-azizova-i-ministra-inostrannyh-del-mongolii-n-enhtajv?inheritRedirect=false&redirect=https%3A%2F%2Fmongolia.mid.ru%3A443%2Fen_US%2Fnovosti%3Fp_p_id%3D101_INSTANCE_hfCjAfLBKGW0%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview%26p_p_col_id%3Dcolumn-1%26p_p_col_count%3D1

如何获取此网站上的所有文章URL?没有数字顺序的地方。

混乱是有秩序的。

如果仔细查看源代码,您肯定会注意到next按钮。如果你点击它并检查url(我知道它很长(,你会看到它的最后有一个值——_cur=1。这是您当前页面的编号。

然而,问题是,你不知道有多少页,对吧?但是,您可以通过编程在下一个按钮中继续检查url,并在没有更多页面可访问时停止。

同时,当你在当前页面时,你可以抓取文章的网址。

以下是操作方法:

import requests
from lxml import html

url = "https://mongolia.mid.ru/en_US/novosti"
next_page_xpath = '//*[@class="pager lfr-pagination-buttons"]/li[2]/a/@href'
article_xpath = '//*[@class="title"]/a/@href'

def get_page(url):
return requests.get(url).content

def extractor(page, xpath):
return html.fromstring(page).xpath(xpath)

def head_option(values):
return next(iter(values), None)

articles = []
while True:
page = get_page(url)
print(f"Checking page: {url}")
articles.extend(extractor(page, article_xpath))
next_page = head_option(extractor(page, next_page_xpath))
if next_page == 'javascript:;':
break
url = next_page
print(f"Scraped {len(articles)}.")
# print(articles)

这将获得216文章URL。如果你想查看文章的URL,只需取消最后一行的注释-# print(articles)

这是2:的样本

['https://mongolia.mid.ru:443/en_US/novosti/-/asset_publisher/hfCjAfLBKGW0/content/24-avgusta-sostoalas-vstreca-crezvycajnogo-i-polnomocnogo-posla-rossijskoj-federacii-v-mongolii-i-k-azizova-s-ministrom-energetiki-mongolii-n-tavinbeh?inheritRedirect=false&redirect=https%3A%2F%2Fmongolia.mid.ru%3A443%2Fen_US%2Fnovosti%3Fp_p_id%3D101_INSTANCE_hfCjAfLBKGW0%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview%26p_p_col_id%3Dcolumn-1%26p_p_col_count%3D1', 'https://mongolia.mid.ru:443/en_US/novosti/-/asset_publisher/hfCjAfLBKGW0/content/19-avgusta-2020-goda-sostoalas-vstreca-crezvycajnogo-i-polnomocnogo-posla-rossijskoj-federacii-v-mongolii-i-k-azizova-s-zamestitelem-ministra-inostran?inheritRedirect=false&redirect=https%3A%2F%2Fmongolia.mid.ru%3A443%2Fen_US%2Fnovosti%3Fp_p_id%3D101_INSTANCE_hfCjAfLBKGW0%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview%26p_p_col_id%3Dcolumn-1%26p_p_col_count%3D1']

最新更新