【问题标题】:Webscrape containers with Python使用 Python 抓取 Webscrape 容器
【发布时间】:2018-10-31 10:40:21
【问题描述】:

我正在尝试从该网页上的容器中抓取内容:https://www.check24.de/handytarife/vergleich?activeForm=sim

我通常使用 beautifulsoup 进行网页抓取,但在这种情况下,我发现它不适用于该网站。当我运行“soup”时,我只获得了网站架构的详细信息,而不是网站上可用容器中的内容。

page_link = 'check24.de/handytarife/vergleich?activeForm=sim' 
page_response = requests.get(page_link, timeout=5, verify=False, headers={'User-Agent': 'Mozilla/5.0'}) 
soup = BeautifulSoup(page_response.text,'lxml')

你知道有什么好的 Python 库可以做我想做的事情吗?

最好, 山姆

【问题讨论】:

  • 分享您的代码以及当前和所需的输出
  • page_link = 'check24.de/handytarife/vergleich?activeForm=sim' page_response = requests.get(page_link, ti​​meout=5, verify=False, headers={'User-Agent': 'Mozilla/5.0'}) soup = BeautifulSoup (page_response.text,'lxml')
  • 我想获取网站上每个容器中的所有项目。例如,LTE Special、LTE All 3 GB...
  • requests 无法处理没有架构的 URL。这是你的第一个问题。第二个问题是您请求的页面不包含所需的数据。
  • 我真的不明白为什么它不包含所需的数据?

标签: python web-scraping beautifulsoup containers


【解决方案1】:

您正在尝试仅请求一个 HTML 页面,该页面更像 一个用于原始数据的空的漂亮框架。所有数据均来自 XHR

您可以获取JSON格式的所有数据,如下所示:

r = requests.get('https://mobilfunk.check24.de/ajax/result/collection/sim?network_tmobile=yes&network_vodafone=yes&network_o2=yes&data_included=2000&minutes_included=all&select_contract=-24&young_tariff=no&rnp=egal&data_speed=0&lte=no&with_data_tariffs=no&with_high_rejection_rate=all&fixed_traffic_automatic=egal&sms_included=all&tid=CH24_MF_Default').json()

因为你没有告诉 你究竟需要刮什么,这里是你如何获得所有名字

for item in r['rows']:
    print(item['tariff']['names']['resultlist'])

【讨论】:

  • 您是如何找到 XHR 的链接的?
  • @sammtt ,您可以按 F12 -> 切换到网络选项卡 -> 仅选择 XHR 子选项卡 -> 刷新页面...您应该看到页面渲染时发送的所有 XHR
  • 谢谢,但是当我现在尝试从 check24.de/dsl/vergleich/… 获取 json 时找不到任何链接
  • @sammtt ,现在数据在页面源中。在此请求中,您将在第一个请求中发送所有必需的参数,因此不需要额外的请求
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多