Очистка двух типов URL - PullRequest
       6

Очистка двух типов URL

0 голосов
/ 08 ноября 2018

На этой странице , под списком "Зависимости" есть два типа URL. Один из них с официального сайта пакета ("https://archlinux.org/packages/"), а другой с сайта пользовательского пакета (" https://aur.archlinux.org/packages/"). Я хочу извлечь их как отдельный список. Согласно это документация BeautifulSoup , я до сих пор придумал что-то вроде этого:

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/package_name/ вместо https://aur.archlinux.org/packages/package_name/. А также, есть некоторые зависимости aur, написанные в скобках рядом с официальными именами пакетов. Например, alsa-utils (alsa-utils-transparent). Я хочу не пересматривать эти альтернативные пакеты.

Я относительно новичок в bs4 и не знаю регулярных выражений, поэтому я был немного озадачен тем, как мне следует подходить к этой проблеме. Я был бы рад, если бы кто-нибудь показал мне способ решения этой проблемы.

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Если вам не обязательно придерживаться bs4, вы можете попробовать lxml.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/']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...