Веб-очистка конкретной информации только с использованием python

#python #python-3.x #web-scraping #beautifulsoup

#python #python-3.x #веб-очистка #beautifulsoup

Вопрос:

Я хотел бы очистить только конкретную информацию из двух разных URL-адресов ниже: Из таблицы президентов с правой стороны информационного поля. Я хочу очистить только информацию о «рождении», «Политической партии» и «веб-сайте». Я попробовал приведенный ниже код, но он просто предоставляет мне все детали. Я не знаю, как очистить конкретную информацию. Любая помощь в достижении этого очень ценится.

 https://en.wikipedia.org/wiki/Barack_Obama
https://en.wikipedia.org/wiki/Donald_Trump
  

Код:

 import requests
import urllib.request
import pandas as pd
import csv
from bs4 import BeautifulSoup

url='https://en.wikipedia.org/wiki/Barack_Obama'
response = requests.get(url)
print(response.status_code)
soup = BeautifulSoup(response.text,"html.parser")
soup

table = soup.findAll('table',{"class":"infobox vcard"})[0]
values =[]
tr = table.findAll(['tr'])  
tr

  

Результат:

 Barack Obama
Obama in 2012
""
44th President of the United States
"In officeJanuary 20, 2009 – January 20, 2017"
Vice President,Joe Biden
Preceded by,George W. Bush
Succeeded by,Donald Trump
United States senatorfrom Illinois
"In officeJanuary 3, 2005 – November 16, 2008Serving with Dick Durbin"
Preceded by,Peter Fitzgerald
Succeeded by,Roland Burris
Member of the Illinois Senatefrom the 13th district
"In officeJanuary 8, 1997 – November 4, 2004"
Preceded by,Alice Palmer
Succeeded by,Kwame Raoul
""
Personal details
Born,"Barack Hussein Obama II (1961-08-04) August 4, 1961 (age 59)Honolulu, Hawaii, U.S."
Political party,Democratic
Spouse(s),Michelle Robinson​ (m. 1992)
Children,MaliaSasha
Mother,Ann Dunham
Father,Barack Obama Sr.
Relatives,See Obama family
Residence,"Kalorama (Washington, D.C.)"
Alma mater,Columbia University (BA)Harvard University (JD)
Awards,Nobel Peace Prize (2009)Profile in Courage Award (2017)
Signature,
Website,Official websiteObama FoundationWhite House Archives
  

Ответ №1:

Попробуйте что-то вроде:

 targets = ["Born","Political party", "Website"]
values =[]
data = table.select('tr th[scope]')
for dat in data:
    if dat.text in targets:     
        if dat.text == "Website":
            urls = []
            for s in dat.find_next_sibling('td').select('a'):                
                urls.append(s['href'])
            values.append(urls)
        else:
            values.append(dat.find_next_sibling('td').text)

values
  

Вывод:

   ['Barack Hussein Obama II (1961-08-04) August 4, 1961 (agexa059)Honolulu, Hawaii, U.S.',
 'Democratic',
 ['https://barackobama.com/',
  'https://www.obama.org/',
  'https://obamawhitehouse.archives.gov']]
  

Ответ №2:

Когда вы смотрите веб-сайт, дополнительная информация — это единственная таблица с классом infobox , и для выбора определенного содержимого вы можете использовать селекторы css и contains в этих селекторах

 import requests
from bs4 import BeautifulSoup

url='https://en.wikipedia.org/wiki/Barack_Obama'
response = requests.get(url)
soup = BeautifulSoup(response.text,"html.parser")
table = soup.find('table',{"class":"infobox vcard"})
born = table.select_one("tr th:contains(Born)").next_sibling
website = table.select_one("tr th:contains(Website)").next_sibling
party = table.select_one("tr th:contains(Political)").next_sibling

print("Born - {}".format(born.get_text(strip=True)))
print("-"*25)
print("Website")
for a in website.find_all("a"):
    print(a.get_text()   " - "   a["href"])
print("-"*25)
print("Political Party")
print(party.find("a").get_text()   " - "   party.find("a")["href"])
  

Вывод:

 Born - Barack Hussein Obama II(1961-08-04)August 4, 1961(age 59)Honolulu,Hawaii, U.S.
-------------------------
Website
Official website - https://barackobama.com/
Obama Foundation - https://www.obama.org/
White House Archives - https://obamawhitehouse.archives.gov
-------------------------
Political Party
Democratic - /wiki/Democratic_Party_(United_States)
  

Комментарии:

1. Спасибо!! Мне интересно, что, если информация находится в <td> < a href>, например, с этой страницы en.wikipedia.org/wiki/London