几天来,我一直在努力搜索这个网站:https://www.spiegel.de/suche/?suchbegriff=letzte%2Bgeneration&erschienenBei=der-spiegel

我一直在try 使用Requests和BeautifulSoup来清理这个网站.我的最终目标是获得所有包含关键字"Letzte一代人"或"Klimaaktivisten"的链接.目前,我一直在使用以下代码来获取HTML.

import requests
from bs4 import BeautifulSoup
import os
import pandas as pd
   
os.chdir(Path is here)
    
spiegel_lg_suche = "https://www.spiegel.de/suche/?suchbegriff=letzte%2Bgeneration&seite={}&erschienenBei=der-spiegel"
    
# Leere Liste "linkliste_spiegel" erstellen
linkliste_spiegel_suche = []
    
# Schleife über die Seitenzahl von 1-11
for seitenzahl in range (1, 11):
    # Einsetzer der Zahl in das base_url-Format
    url = spiegel_lg_suche.format(seitenzahl)
    # Inhalte werden in BeautifulSoup geladen
    page = requests.get(url).content
    soup = BeautifulSoup(page, 'html.parser')
        
    (...)

在这段摘录之后,有一些代码用于迭代不同的HTML标记(过go 在使用"Letzte生成"标记时有效),以及将所有值保存为DataFrame和CSV.

虽然代码在搜索"Letzte生成"标签时可以正常工作,但它不适用于搜索页面.我的讲师查看了代码,并向我展示了BeautifulSoup显示的页面没有搜索查询.然而,他却帮不了我.我仍然想解决这个问题,只是为了它.

使用selenium可以帮助解决这个问题吗?

推荐答案

您试图访问的网站的内容是通过AJAX加载的. try 将URL替换为:

url = "https://www.spiegel.de/services/sitesearch/search?segments=spon&q=letzte+generation&page_size=20&page={}"

您不需要BS4来解析结果,因为它们是json.

另外,Spiegel.de还可以检测到您正在使用带有用户代理头的脚本,并返回验证码. try 添加:

page = requests.get(url, headers= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
"})

以下是完整的代码:

import requests
import os
import json   

spiegel_lg_suche = "https://www.spiegel.de/services/sitesearch/search?segments=spon&q=letzte+generation&page_size=20&page={}"
    
# Leere Liste "linkliste_spiegel" erstellen
linkliste_spiegel_suche = []
    
# Schleife über die Seitenzahl von 1-11
for seitenzahl in range (1, 11):
    # Einsetzer der Zahl in das base_url-Format
    url = spiegel_lg_suche.format(seitenzahl)
    # Inhalte werden in BeautifulSoup geladen
    page = requests.get(url,headers= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"}).text
    content = json.loads(page)
    page_size = content["num_results"]
    print("page",seitenzahl,"returned",page_size,"results")
    for result in content["results"]:
        print("-------------------------------------------")
        print(result)
        print("-------------------------------------------")

Python相关问答推荐

Pandas 在最近的日期合并,考虑到破产

如何访问所有文件,例如环境变量

将输入管道传输到正在运行的Python脚本中

优化pytorch函数以消除for循环

ThreadPoolExecutor和单个线程的超时

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

导入...从...混乱

Scrapy和Great Expectations(great_expectations)—不合作

Python列表不会在条件while循环中正确随机化'

如何合并两个列表,并获得每个索引值最高的列表名称?

在matplotlib中删除子图之间的间隙_mosaic

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

(Python/Pandas)基于列中非缺失值的子集DataFrame

从旋转的DF查询非NaN值

巨 Python :逆向猜谜游戏

具有不匹配列的2D到3D广播

如何获取给定列中包含特定值的行号?

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?

Python:使用asyncio.StreamReader.readline()读取长行

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?