【发布时间】:2020-11-20 19:24:57
【问题描述】:
我有几个链接到酒店页面的 URL,我想从中抓取一些数据。
我正在使用以下这个脚本,但我想更新它:
data=[]
for i in range(0,10):
url = final_list[i]
driver2 = webdriver.Chrome()
driver2.get(url)
sleep(randint(10,20))
soup = BeautifulSoup(driver2.page_source, 'html.parser')
my_table2 = soup.find_all(class_=['title-2', 'rating-score body-3'])
review=soup.find_all(class_='reviews')[-1]
try:
price=soup.find_all('span', attrs={'class':'price'})[-1]
except:
price=soup.find_all('span', attrs={'class':'price'})
for tag in my_table2:
data.append(tag.text.strip())
for p in price:
data.append(p)
for r in review:
data.append(r)
但问题出在这里,tag.text.strip() 像这里一样刮掉评分数字:
它会将数字评分剥离为单独的值,但某些酒店的评分数量不同。这是一个有 7 个评分的酒店,默认数字是 8。有些有 7 个评分,其他 6 个,依此类推。所以最后,我的数据框很糟糕。如果酒店没有 8 个评分,则该值将被转移。
我的问题是:如何告诉脚本“如果这个 tag.text.strip(i) 中有一个值,那么就放这个值,但如果没有放 None。当然,它是八个值.
我尝试了几件事,例如:
for tag in my_table2:
for i in tag.text.strip()[i]:
if i:
data.append(i)
else:
data.append(None)
但不幸的是,这无济于事,所以如果你能帮助找出答案,那就太棒了:)
如果这可以帮助你,我把链接放在我正在抓取的酒店上:
数字评分在最后
谢谢。
【问题讨论】:
-
你能添加一些示例 HTML 代码吗?例如一个有 6 个评分,一个有 8 个评分?
-
为您的
data使用字典怎么样?例如data['price'] = p data['review'] = r? -
什么意思?是的,给我 2 分钟,我会检查 html 并更新我的帖子
-
把所有的html都放太长,所以我把链接放在一些酒店上。
-
你能添加一个有 6 或 8 个评分的链接吗?
标签: python python-3.x selenium web-scraping beautifulsoup