Оставить часть супа - PullRequest
       1

Оставить часть супа

0 голосов
/ 19 сентября 2019

Я учусь пользоваться красивым супом.Мне удалось разобрать HTML, и теперь я хочу извлечь список ссылок со страницы.Проблема в том, что меня интересуют только некоторые ссылки, и я могу думать только о том, чтобы взять все ссылки после появления определенного слова.Могу ли я бросить часть супа, прежде чем начать добычу?Спасибо.

Вот что у меня есть:

# import libraries
import urllib2
from bs4 import BeautifulSoup
import pandas as pd
import os
import re

# specify the url
quote_page = 'https://econpapers.repec.org/RAS/pab7.htm'

# query the website and return the html to the variable page
page = urllib2.urlopen(quote_page)

# parse the html using beautiful soup and store in variable soup
soup = BeautifulSoup(page, 'html.parser')

print(soup)

#transform to pandas dataframe
pages1 = soup.find_all('li', )
print(pages1)

pages2 = pd.DataFrame({
        "papers": pages1,
    })

print(pages2)

И мне нужно отбросить верхнюю половину ссылок в page2 и единственный способ отличить те, от которых я хочуостальное - это слово, которое появляется в html, это строка "<h2 class="colored">Journal Articles</h2>"

РЕДАКТИРОВАТЬ: я только что заметил, что я также могу отделить их по началу ссылки.Я хочу только те, которые начинаются с "/article/"

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Также с помощью css_selector:

# parse the html using beautiful soup and store in variable soup
soup = BeautifulSoup(page, 'lxml')
#print(BeautifulSoup.prettify(soup))

css_selector = 'a[href^="/article"]'
href_tag_list = soup.select(css_selector)
print("Href list size:", len(href_tag_list)) # check that you found datas, do if else if needed

href_link_list = [] #use urljoin probably needed at some point
for href_tag in href_tag_list:
    href_link_list.append(href_tag['href'])
    print("href:", href_tag['href'])

Я использовал эту справочную веб-страницу, предоставленную другим пользователем стека потока: Веб-ссылка

Примечание: у вас будетснять список "/article/".

2 голосов
/ 19 сентября 2019

Могут быть разные способы получить всю информацию, начиная с "/ article /".Один из простых способов сделать это:

# import libraries
import urllib.request
from bs4 import BeautifulSoup
import os
import re
import ssl

# specify the url
quote_page = 'https://econpapers.repec.org/RAS/pab7.htm'

gcontext = ssl.SSLContext()

# query the website and return the html to the variable page
page = urllib.request.urlopen(quote_page, context=gcontext)

# parse the html using beautiful soup and store in variable soup
soup = BeautifulSoup(page, 'html.parser')

#print(soup)

# Anchor tags starting with "/article/"
anchor_tags = soup.find_all('a', href=re.compile("/article/"))

for link in anchor_tags:
    print(link.get('href'))

Этот ответ также будет полезен.И, ознакомьтесь с кратким руководством от BeautifulSoup , оно содержит очень хорошие и подробные примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...