如何使用selenium chromedriver和google收集>100k新闻文章URL进行数据分析?

问题描述 投票:0回答:1

我必须从大约 5 个网站收集大约 2017 年到 2024 年的互联网新闻文章的文本数据。这是数万/数十万篇文章。我有一种方法可以直接从新闻网站中抓取其中一些 URL,但其中一些 URL 只允许在同一网页上重复加载 25 个以上的新闻文章链接,这最终会导致我用来抓取新闻网站的 Web 浏览器崩溃。网站。我可以使用 Google 搜索一次查找一个 URL,但这仍然是数十万次 Google 搜索,而 Google 最终会停止这种搜索。我在网站上遇到了一个特殊问题 https://ct24.ceskatelevize.cz/。有什么办法可以获取URL列表吗?

我。正如我提到的,首先我尝试访问新闻网站并使用 selenium chromedriver 从文章列表中抓取 URL 和发布日期。这对某些网站有效,但其他网站只允许在同一网页上加载较旧的文章,因此如果我想访问 2017 年的文章,我将不得不在单个网页上加载数千个文章链接,这最终会使网站崩溃(更不用说新闻网站最终会因为请求量而切断我的联系,并且加载每组新文章所需的时间逐渐更长)。我不能只是停下来,重新加载网页,然后从上次中断的地方继续,因为重新加载网页会让我回到最新的文章集。 二.这些文章有 ID,我可以用它来排序查找 URL。示例:文章 URL 类似于“ct24.ceskatelevize.cz/article/category/title-of-an-article-id”。我可以预测 id,但我不知道文章标题和类别。我可以使用简单的 Google 搜索(例如“site:ct24.ceskatelevize.cz/article id”)来查找文章 URL。问题是谷歌不太喜欢我像这样进行数以万计的搜索,它经常试图验证我是否是机器人,这阻止了我。我不知道如何扩展这个方法,以便我可以获得几十万个 URL。

web-scraping selenium-chromedriver web-crawler large-data-volumes downloading-website-files
1个回答
0
投票

根据您的问题阅读以下解决方案!

第一:

根据你的问题,我认为你想收集 2017-2024 年 10 万多篇新闻文章,如果你有一个特定的新闻网站作为目标,那么你可以使用 Wayback 存档机,它比 Google 搜索效果更好!我有一些开源工具可以做到这一点,这里是用

golang
python
编写的工具列表:

1.
gau
(获取所有网址),作者:
Corben Leo


  • 写于
    golang
  • GitHub 存储库:
    https://github.com/lc/gau
  • 安装:
    go install github.com/lc/gau/v2/cmd/gau@latest
  • 帮助:
    ./gau -h

2.
waybackurls
作者:
tomnomnom
:

  • 写于
    golang
  • GitHub 存储库:
    https://github.com/tomnomnom/waybackurls
  • 安装:
    go install github.com/tomnomnom/waybackurls@latest
  • 帮助:
    ./waybackurls -h

3.
get-wayback-machine
作者:
jfilter
:


  • GitHub 存储库:
    https://github.com/jfilter/get-wayback-machine
  • 写于
    python
  • 安装:
    pip install get_wayback_machine

第二:

我看到您正在努力使用这个网络应用程序

https://ct24.ceskatelevize.cz/
。好吧,为了减少时间和请求,您可以使用此脚本来实现您的目标!详细信息如下:

您的目标新闻 Web 应用程序有一个名为

/api/queuedArticles?queueId=17&page=1&pageSize=100
的 API 端点,每次您单击查看或加载的按钮多于目标应用程序请求此端点获取新闻文章的数量时,您可以通过运行此脚本获得 80k+ 新闻文章链接,我在脚本上添加了注释,以便更好地理解。

import requests
from datetime import datetime
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning) #disable warning

article_url = set()
def getData(content): #gathering data from json response
    for i in content['data']['articles']:
        article_id = i['article']['id']
        slug = i['article']['slug']
        path = i['article']['mainSection']['path']
        date = datetime.utcfromtimestamp(i['article']['publication']['datePublished']).strftime('%Y-%m-%d %H:%M:%S')
        url = "https://ct24.ceskatelevize.cz/clanek" #article endpoint to append list of links

        pri = f"Article-URL: {url}/{path}/{slug}-{article_id}, Date:[{date}]"
        article_url.add(pri)
   
def gatherArtcle():
    for i in range(1,1061):
        try:
            data = f"https://ct24.ceskatelevize.cz/api/queuedArticles?queueId=17&page={i}&pageSize=100" #API endpoint with limit of 100 result per page. has 1061 page- from 2017 to 2024 news articles
            session = requests.Session()
            req = session.get(data,verify=False)
            response = req.json()
            getData(response)
        except Exception:
            pass
            
gatherArtcle()
for i in sorted(article_url): #sorting value for unique result to avoid possible duplicate.
    print(i)

如果您对此答案有任何疑问或遇到任何错误,请随时发表评论重播。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.