【问题标题】:Web scraping using python can't find the weblink使用python进行网络抓取找不到网络链接
【发布时间】:2021-06-01 00:29:07
【问题描述】:

我是使用 python 进行网络抓取的新手。我已经成功地学会了从一些网站上抓取信息,例如https://www.jameda.de 和维基百科。但是我遇到了一个网站,在搜索特定数据时不会打开新的网络链接。我无法理解如何抓取该网站。非常感谢任何帮助。

网站: https://www.kvwl.de/earzt/index.htm

在搜索字段中,您可以在(Ihr Standort)字段中输入例如“柏林,德国”并查看网址,它不会改变。我还查看了检查字段,我看不到任何用于抓取数据的链接。

非常感谢任何帮助!

以下是我用来从其他网站提取信息的代码:

import requests
from bs4 import BeautifulSoup, NavigableString, Tag
import urllib.request
import re
base_site = "https://www.tk-aerztefuehrer.de/TK/Suche_SN/index.js?a=DL&Otn1=798&Ic1=127&Ftg=33014+Bad+Driburg&Ftg_e=&Lng=36"
response = requests.get(base_site)
response.status_code
html = response.content
html

soup = BeautifulSoup(html, 'lxml')
with open('TK_33014_Bad_Driburg_LXML.html','wb') as file:
    file.write(soup.prettify('utf-8'))

divs = soup.find_all("div",{"class": "card dl"})

headings = [div.find('a').text for div in divs]
headings

【问题讨论】:

  • 让我猜猜:标题是empty,div 是empty
  • 您可能需要使用selinium
  • 感谢 Ajay 的提示。我会调查的!!

标签: python web-scraping beautifulsoup scrapy


【解决方案1】:

本网站使用 JavaScript 进行搜索,BeautifulSoup 仅解析 HTML。

所以你可以做两件事来抓取这样的页面:

  • 使用驱动无头浏览器(没有 GUI)的东西,它实际上执行 Javascript。然后,您可以模拟输入文本字段并单击按钮。正如 cmets 中所指出的,selenium 是一个选项。来自更多的 JavaScript 背景,我更喜欢 puppeteer,它似乎也有 a Python port(虽然还没有用 Python 尝试过)或 playwright

  • 对页面请求进行反向工程:如果您打开 Chrome devtools 到您链接页面上的网络选项卡,搜索某些内容并选择“XHR”选项卡(用于 JavaScript 完成的 XML HTTP 请求),如屏幕截图所示,您可以看到正在请求的页面,以及参数。您甚至可以右键单击它并将请求复制为curlfetch 等等。

这是一个 JavaScript 提取请求:

fetch("https://www.kvwl.de/DocSearchService/DocSearchService/searchDocs", {
  "headers": {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "en-US,en;q=0.9",
    "content-type": "application/json; charset=UTF-8",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin"
  },
  "referrer": "https://www.kvwl.de/earzt/index.htm",
  "referrerPolicy": "same-origin",
  "body": "{\"Latitude\":52.52000659999999,\"Longitude\":13.404954,\"DocGender\":\"\",\"DocNamePattern\":\"\",\"ExpertiseAreaStructureId\":\"\",\"ApplicableQualificationId\":\"\",\"SpecialServiceId\":\"\",\"LanguageId\":\"\",\"BarrierFreeAttributeFilter\":{\"ids\":[]},\"PageId\":0,\"PageSize\":20}",
  "method": "POST",
  "mode": "cors",
  "credentials": "omit"
});

然后,您可以直接在脚本中请求此 URL,将必要的变量传递到正文中,您应该会收到带有答案的 JSON 响应。

【讨论】:

  • 谢谢!!这真的很有帮助!
猜你喜欢
  • 2019-04-24
  • 2021-04-25
  • 2018-12-03
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多