Красивый суп: скрести данные таблицы - PullRequest
0 голосов
/ 01 сентября 2018

Я ищу для извлечения данных таблицы из URL ниже. В частности, я хотел бы извлечь данные в первом столбце. Когда я запускаю приведенный ниже код, данные в первом столбце повторяются несколько раз. Как получить значения, отображаемые только один раз, как показано в таблице?

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen('http://www.pythonscraping.com/pages/page3.html').read()
soup = BeautifulSoup(html, 'lxml')
table = soup.find('table',{'id':'giftList'})

rows = table.find_all('tr')

for row in rows:
    data = row.find_all('td')
    for cell in data:
        print(data[0].text)

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Используя модуль requests в сочетании с selectors, вы также можете попробовать следующее:

import requests
from bs4 import BeautifulSoup

link = 'http://www.pythonscraping.com/pages/page3.html'

soup = BeautifulSoup(requests.get(link).text, 'lxml')
for table in soup.select('table#giftList tr')[1:]:
    cell = table.select_one('td').get_text(strip=True)
    print(cell)

Выход:

Vegetable Basket
Russian Nesting Dolls
Fish Painting
Dead Parrot
Mystery Box
0 голосов
/ 01 сентября 2018

Попробуйте это:

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen('http://www.pythonscraping.com/pages/page3.html').read()
soup = BeautifulSoup(html, 'lxml')
table = soup.find('table',{'id':'giftList'})

rows = table.find_all('tr')

for row in rows:
    data = row.find_all('td')

    if (len(data) > 0):
        cell = data[0]
        print(cell.text)
...