Python 抓取两种类型的URL';s
在中,在“依赖项”列表下有两种类型的URL。其中一个来自官方软件包网站(“”),另一个来自用户软件包网站(“”)。我想将它们提取为一个单独的列表。据我所知,到目前为止我提出了类似的想法:Python 抓取两种类型的URL';s,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,在中,在“依赖项”列表下有两种类型的URL。其中一个来自官方软件包网站(“”),另一个来自用户软件包网站(“”)。我想将它们提取为一个单独的列表。据我所知,到目前为止我提出了类似的想法: sauce = urllib.request.urlopen("https://aur.archlinux.org/packages/blockify/").read() soup = bs.BeautifulSoup(sauce, 'lxml') official_dependencies = [] aur_
sauce = urllib.request.urlopen("https://aur.archlinux.org/packages/blockify/").read()
soup = bs.BeautifulSoup(sauce, 'lxml')
official_dependencies = []
aur_dependencies = []
for h3 in soup.find_all('h3'):
if "Dependencies" in h3.text:
for url in h3.find_all_next('a', attrs={'href': re.compile("^https://www.archlinux.org/packages/")}):
official_dependencies.append(url.get('href'))
这对我的第一个目标很有效。但我不确定应该如何提取aur依赖项,因为它们的href
类似于/packages/packages\u name/
而不是https://aur.archlinux.org/packages/package_name/
。此外,在官方软件包名称旁边的括号中还写有一些aur依赖项。例如,alsa utils(alsa utils透明)
。我想避免刮掉那些可选的aur包
我对bs4比较陌生,不知道正则表达式,所以我对应该如何处理这个问题感到有点困惑。如果有人能告诉我解决这个问题的方法,我会很高兴
谢谢如果您不必遵守bs4,您可以尝试解决方案
感谢您提供非常直观的解决方案。但有一件事我不清楚。在您的代码中,有什么可以避免我想要避免的用括号括起来的aur链接呢?@Huzo,这些链接的父节点是
span
节点,因此它们没有XPath匹配,XPath应该是//ul[@id=“pkgdepslist”]/li/span/a/@href
,我现在看到括号中的链接。请原谅我的HTML知识:)。再次感谢。
from lxml import html
response = urllib.request.urlopen("https://aur.archlinux.org/packages/blockify/").read()
source = html.fromstring(response)
all_links = source.xpath('//ul[@id="pkgdepslist"]/li/a/@href')
simple_links = [link for link in all_links if link.startswith('https')]
aur_links = ['https://aur.archlinux.org' + link for link in all_links if not link.startswith('https')]
print(simple_links)
['https://www.archlinux.org/packages/?q=alsa-utils', 'https://www.archlinux.org/packages/?q=gst-python', 'https://www.archlinux.org/packages/?q=pygtk', 'https://www.archlinux.org/packages/?q=python-dbus', 'https://www.archlinux.org/packages/?q=python-docopt', 'https://www.archlinux.org/packages/?q=wmctrl', 'https://www.archlinux.org/packages/?q=python-setuptools', 'https://www.archlinux.org/packages/?q=pulseaudio']
print(aur_links)
['https://aur.archlinux.org/packages/spotify/']