我试图从html td标签中捕获价格值,但问题是还有其他td具有相同的类名:请参见下图。 enter image description here
这是我写的代码
from builtins import any as b_any
from urllib.parse import urlparse
from urllib.parse import urljoin
from collections import Counter
import urllib.request
import csv
import schedule
import time
import re
from bs4 import BeautifulSoup
url="http://offer.ebay.es/ws/eBayISAPI.dll?ViewBidsLogin&item=122713288532&rt=nc&_trksid=p2047675.l2564"
req = urllib.request.Request(url, headers={'User-agent': 'Mozilla/5.0'})
htmlpage = urllib.request.urlopen(req)
html = htmlpage.read().decode('utf-8')
soup = BeautifulSoup(html,"html.parser")
table = soup.find_all('td',{'class':'onheadNav'})
'''for txt in table:
nametxt = txt.text
result = ''.join([i for i in nametxt if not i.isdigit()])
cleantxt = result.replace('(','')
print(cleantxt.replace(')',''))
rank = txt.a.text
print(rank)'''
price = soup.select('td.contentValueFont')
for pr in price:
print(pr.text)
如果我将价格换成for循环,那么它只会获得第一个价格,但我想立刻获得所有价格。
编辑说明: 我想要捕获所有价格,但问题是有三个相同类名的td,一个td是Cantidad(数量)的价格一,而日期这些都有相同的类。当我试图只得到价格部分时,我的代码返回所有三个td' s。我希望你现在能得到它
答案 0 :(得分:1)
body {
background-image: url("https://i.imgur.com/QdMWFHZ.jpg")
}
答案 1 :(得分:1)
你需要做的就是找到所有的' tr'您想要抓取的表格中的标签,然后迭代所有这些标签以获取特定' td'。
的文字。这样的事情:
table = soup.find_all('table')
for tr in table[9].find_all('tr')[1:-1]:
price = tr.find_all('td')[2].text.strip()
print(price)
经过一些研究,我们可以发现我们想要的表是页面上的第10个表,因此table[9]
。此外,因为我们不想要第一个和最后一个' tr'我们做find_all('tr')[1:-1]
希望这能解决你的问题。
答案 2 :(得分:0)
简短解决方案:
from bs4 import BeautifulSoup
import requests
url = "http://offer.ebay.es/ws/eBayISAPI.dll?ViewBidsLogin&item=122713288532&rt=nc&_trksid=p2047675.l2564"
html = requests.get(url).content
soup = BeautifulSoup(html, "html.parser")
prices =[ price.string.replace('\xa0', ' ')
for price in soup.select('td.contentValueFont') if price.string.endswith('EUR')]
print(prices)
输出:
['4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '8,90 EUR', '8,90 EUR', '8,90 EUR', '8,90 EUR', '8,90 EUR', '8,90 EUR', '8,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR', '14,90 EUR', '4,90 EUR', '4,90 EUR', '4,90 EUR']