如何从 HTML 中提取链接?

Posted

技术标签:

【中文标题】如何从 HTML 中提取链接?【英文标题】:How can I extract the links from HTML? 【发布时间】:2019-07-10 20:24:19 【问题描述】:

我正在尝试获取 SF 编年史中此类别中每篇文章的链接,但我不确定应该从哪里开始提取 URL。这是我到目前为止的进展:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://www.sfchronicle.com/local/'

# opening up connection, grabbing the page
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

# html parsing
page_soup = soup(page_html, "html.parser")
zone2_container = page_soup.findAll("div","class":"zone zone-2")
zone3_container = page_soup.findAll("div","class":"zone zone-3")
zone4_container = page_soup.findAll("div","class":"zone zone-4")
right_rail_container = page_soup.findAll("div","class":"right-rail")

我想要的所有链接都位于 zone2-4_container 和 right_rail_container 中。

【问题讨论】:

只需从<a>标签中选择href属性(例如:urls = [i['href'] for i in page_soup.select('div.zone.zone-2 a')] 我怎样才能为 div.zone.zone-1 做到这一点? 【参考方案1】:

您可以使用以下代码获取所有链接:

all_zones = [zone2_container, zone3_container, zone4_container, right_rail_container]
urls = []
for i in all_zones:
    links = i[0].findAll('a')
    for link in links:
        urls.append(link['href'])

我已将所有列表合并到一个列表中,但您也可以定义一个函数来实现相同的目的。

def get_urls(zone):
    urls = []
    for i in zone:
        links = i.findAll('a')
        for link in links:
            urls.append(link['href'])
    return urls 

get_urls(zone2_container)

【讨论】:

如果我有一个 zone1_container,你知道如何提取链接吗?似乎它的设置与其他容器不同【参考方案2】:

现在听起来您基本上想要所有文章链接,在这种情况下,您可以使用带有 contains 运算符的属性 = 值 css 选择器来定位其值包含子字符串 'article' 的 href 属性。

import requests
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin
base = 'https://www.sfchronicle.com/'
url = 'https://www.sfchronicle.com/local/'
res = requests.get(url)
soup = bs(res.content, 'lxml')
links = [urljoin(base,link['href']) for link in soup.select('[href*=article]')]
print(links)
print(len(links))

【讨论】:

你试过了吗?

以上是关于如何从 HTML 中提取链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何从网页的不同超链接中提取数据

从href html标签中提取带有红宝石中nokogiri的链接(URL)?

有时如何使用 Xpath 从包含链接的表格单元格中提取数据?

从 HTML 源 Swift 中提取链接

如何在反应原生 Firebase 动态链接中从收到的链接中提取参数?

Python中的HTMLParsercookielib抓取和解析网页从HTML文档中提取链接图像文本Cookies