【问题标题】:How can i get url address using Beautifulsoup我如何使用 Beautifulsoup 获取 url 地址
【发布时间】:2019-08-04 00:35:17
【问题描述】:

我正在尝试从 <a href=> 抓取 url 地址 但是这个网站的<href> 是#none。 我怎样才能抓取这个 url 地址? 我已经想通了很多,但我找不到提示。

喜欢这个

<a href="#none" onclick="goDetail(519975);">
title
<a>

from urllib.request import urlopen
from bs4 import BeautifulSoup
import ssl
import re

ssl._create_default_https_context = ssl._create_unverified_context

html = urlopen('https://www.daegu.ac.kr/article/DG159/list')
bs = BeautifulSoup(html, 'html.parser')

nameList = bs.findAll('td', {'class': 'list_left'})

for name in nameList: 
    print(name.get_text())
    print(name.get_url)
    print('\n----------------------------------------------')

【问题讨论】:

  • 简短的回答是“你不能”。您可以使用selenium 自动运行将运行由链接触发的 javascript 的浏览器
  • 您可能必须使用无头浏览器!
  • 所以我需要使用“硒”对吗?我会弄清楚的!谢谢你们。

标签: python html web-scraping beautifulsoup web-crawler


【解决方案1】:

您可以将 onclick 中的 id 连接到基本 url(onclick 事件会发生这种情况)。前三个链接(没有onclick)具有不同的基数。

from bs4 import BeautifulSoup as bs
import requests

base1 = 'https://www.daegu.ac.kr/article/DG159/detail/'
base2 = 'https://www.daegu.ac.kr/article/DG159'
r = requests.get('https://www.daegu.ac.kr/article/DG159/list')
soup = bs(r.content, 'lxml')
links = [base1 + a['onclick'].split('(')[1].split(')')[0] if a.has_attr('onclick') else base2 + a['href'] for a in soup.select('.board_tbl_list a')]
print(links)

【讨论】:

  • 首先非常感谢!实际上我是编码的超级初学者,所以我不太了解代码。我会弄清楚的。谢谢!
  • 带有 onclick 属性的 a 标签有一个 Id 号。该 id 被添加到基本字符串中,以形成该课程的详细信息页面的 url 等。然而,前 3 个链接是没有 onclick 的实际部分 url,只需要添加正确的替代基本字符串。代码收集了section中所有的a标签元素,并检查元素中是否有onclick属性。如果存在,则使用 split 提取数字并将其添加到适当基数的末尾,否则将提取 href 属性并将其添加到备用基数。
猜你喜欢
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2018-12-19
  • 1970-01-01
  • 2020-06-28
  • 2020-08-11
相关资源
最近更新 更多