Eu estou fazendo um scraping de umas informações de preço, mas me parece que existe um erro no get_text() que eu ainda não entendi
De primeria, eu estou tentando uma estrutura mais simples de print
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'https://tepbac.com/gia-thuy-san/cat/2-thuy-san/'
response = urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'html.parser')
print(soup.find('a', class_="h6").get_text())
print(soup.find('td', class_="text-right text-danger font-weight-bold").get_text())
print(soup.find_next('td').get_text())
print(soup.find('td', class_="text-truncate").get_text())
e me vem o erro
Eu estou usando o find _next no terceiro item porque quando eu descrimino no class correto {'class':'text-right'}) ele me repete o valor do segundo {'class':'text-right text-danger font-weight-bold'}— que é o preço e não a data
AttributeError Traceback (most recent call last)
<ipython-input-54-b84b9a4eca20> in <module>
11 print(soup.find('a', class_="h6").get_text())
12 print(soup.find('td', class_="text-right text-danger font-weight-bold").get_text())
---> 13 print(soup.find_next('td').get_text())
14 print(soup.find('td', class_="text-truncate").get_text())
15
AttributeError: 'NoneType' object has no attribute 'get_text'
Claro que esse print é só para checar se o scraping está funcionando. Eu preciso puxar uma tabela inteira!
Então, eu tenho um for que eu estou ajustando para fazer o meu df
for item in listings:
market = {}
market['specie'] = item.find('a', {'class':'h6'}).getText()
market['price'] = item.find('td', {'class':'text-right text-danger font-weight-bold'}).getText()
market['date'] = item.find('td', {'class':'text-right'}).getText()
market['city'] = item.find('td class', {'a rel':'nofollow'}).getText()
markets.append(market)
pricing = pd.DataFrame(markets)
pricing
e vem o mesmo erro
AttributeError Traceback (most recent call last)
<ipython-input-34-d14b83920384> in <module>
2 market = {}
3
----> 4 market['specie'] = item.find('a', {'class':'h6'}).getText()
5 market['price'] = item.find('td', {'class':'text-right text-danger font-weight-bold'}).getText()
6 market['date'] = item.find('td', {'class':'text-right'}).getText()
AttributeError: 'NoneType' object has no attribute 'getText'
Enfim...alguma luz??