我不能用Python和BeautifulSoup从HTML代码中提取链接(初学者)

8zzbczxx  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(163)

我是一个完全的初学者与网页抓取和编程与Python。答案可能是在论坛的某个地方,但我是如此新,我真的不知道现在,什么寻找。所以我希望,你能帮助我:
上周,我完成了一个为期三天的Python网页抓取课程,目前我正在努力温习我迄今为止学到的东西。
我试图从一个网站刮出一个特定的链接,这样我以后就可以创建一个循环,提取所有其他链接。但我似乎不能提取任何链接,即使他们在HTML代码中可见。

我尝试提取的链接位于此html代码:
<a class="nav-action-arrow-underlined" href="/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/22sfp108/" aria-label="Læs mere om Regionen tilbød ikke"\>Læs mere\</a\>
下面是我用Python编写的程序,我已经试过了:

url = "https://stpk.dk/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/"

r = requests.get(url)
html = r.text
soup = BeautifulSoup(html, "html.parser")
a_tags = soup.find_all("a") len(a_tags)

there is 34 '然后尝试通过从0-33的所有“a标签”而没有找到链接。

如果我正在打印a_tags [26]-我得到这个代码:
<a aria-current="page" class="nav-action is-current" href="/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/"\>Afgørelser fra Styrelsen for Patientklager\</a\>这是在网站顶部的某个地方。但下一个a_tag [27]是在网站底部的代码:
<a class="footer-linkedin" href="``https://www.linkedin.com/company/styrelsen-for-patientklager/``" rel="noopener" target="_blank" title="``https://www.linkedin.com/company/styrelsen-for-patientklager/``"><span class="sr-only">Linkedin profil</span></a>
有人能告诉我如何访问包含链接的HTML代码的特定部分吗?
当我发现如何拔出链接,我的计划是使以下编程:

path = "/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/22sfp108/"
full_url = f"htps://stpk.dk{path}"
print(full_url)
g0czyy6m

g0czyy6m1#

你不会找到你要找的东西,因为requests不会像浏览器那样渲染网站-但不用担心,有一个替代方案。
内容是通过API动态加载的,因此您应该直接调用它们,您将获得包含所显示信息的JSON。

只需对items进行迭代,提取url值,并预先挂起base_url
根据需要检查并操作以下参数:

containerKey: a76f4a50-6106-4128-bc09-a1da7695902b
query: 
year: 
category: 
legalTheme: 
specialty: 
profession: 
treatmentPlace: 
critiqueType: 
take: 200
skip: 0

示例

import requests

url = 'https://stpk.dk/api/verdicts/settlements/?containerKey=a76f4a50-6106-4128-bc09-a1da7695902b&query=&year=&category=&legalTheme=&specialty=&profession=&treatmentPlace=&critiqueType=&take=200&skip=0'
base_url = 'https://stpk.dk'
for e in requests.get(url).json()['items']:
    print(base_url+e['url'])
输出
https://stpk.dk/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/22sfp108/
https://stpk.dk/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/22sfp107/
https://stpk.dk/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/22sfp106/
https://stpk.dk/afgorelser-og-domme/afgorelser-fra-styrelsen-for-patientklager/22sfp105/
...

相关问题