Удалите определенные части веб-страницы с помощью beautifulsoup - PullRequest
2 голосов
/ 18 июня 2020

Я пытаюсь прочитать ссылки со страницы, но получаю больше ссылок, чем хотелось. Что я делаю:

http = httplib2.Http()
status, page= http.request('page address')
soup = BeautifulSoup(page,'html.parser', parse_only=SoupStrainer('a'))
For link in soup:
 if link.has_attr('href'):
    print(link['href'])

Я изучил страницу и заметил, что она состоит из двух основных компонентов:

<div id="main">
<aside id="secondary">

Ссылки, которые мне не нужны, исходят из того, что внутри <aside id="secondary">. Какой самый простой способ получать ссылки только с <div id="main">?

Спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Чтобы выбрать ссылки <a>, которые находятся под <div id="main">, вы можете использовать селектор CSS:

for a in soup.select('div#main a'):
    print(a)

Только для ссылок с атрибутом href=:

for a in soup.select('div#main a[href]'):
    print(a['href'])
0 голосов
/ 18 июня 2020

Я бы посоветовал использовать оператор find_all в beautifulsoup:

my_links = soup.find_all("a", {"id":"main", "href":True})
my_links = [x["href"] for x in my_links]

Предполагая, что ваша веб-страница содержит ссылки внутри родительского div, вы можете сделать следующее:

my_divs = soup.find_all("div", {"id":"main"})
my_links = [x.find_all("a", {"href":True}, recursive=False) for x in my_divs]
# flatten
my_links = [x for y in my_links for x in y]
# extract hrefs
my_links = [x["href"] for x in my_links]

...