Извлечение ссылок из нескольких <ul>с тем же классом - PullRequest
0 голосов
/ 01 июня 2019

Я хочу получить все ссылки из UL с главой list-class, но я получаю только половину ссылки, которую я хочу, потому что ссылки разделены на две <ul>, которые находятся внутри div, как <div><ul>links1</ul><ul>links2</ul></div>. Я новичок в Python, и я действительно застрял.

Также, если возможно, я бы хотел добавить "http://www.example.com" перед каждой ссылкой и сохранить их по одному в списке, чтобы я мог получить к ним доступ со списком [1].

Спасибо, вот код

# import libraries
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
"""Getting Started Example for Python 2.7+/3.3+"""

chapter = 1
chapterlist = 1
links = []
name = ""
reallink = ""
while chapter < 31:
    quote_page = Request('http://website.com/page.html?page=' + str(chapter) + '&per-page=50', headers={'User-Agent': 'Mosezilla/5.0'})
    page = urlopen(quote_page).read()
    soup = BeautifulSoup(page, "html.parser")
    name_box = soup.find("ul", attrs={"class": "list-chapter"})
    links += name_box.find_all("a")
    reallink += str([a['href'] for a in links])
    chapter += 1
f = open("links.txt", "w+")
i = 1
f.write(reallink)
f.close()

1 Ответ

0 голосов
/ 02 июня 2019

Вы используете find, который вернет первое совпадение, а не find_all, который вернет список совпадений.

Предполагая, что ваш ul класс правильный, я бы использовал select вместо этого и собирал бы дочерние a теги из них:

Заменить эти строки:

name_box = soup.find("ul", attrs={"class": "list-chapter"})
links += name_box.find_all("a")
reallink += str([a['href'] for a in links])

С

realinks = ['http://www.example.com' + item['href'] for item in soup.select('ul.list-chapter a')] #I'm assuming href already has leading /
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...