使用BeautifulSoup刮取Tripadvisor进行评论时发生ValueError

时间:2019-04-16 09:53:52

标签: python web-scraping beautifulsoup valueerror

我正在尝试将Tripadvisor的评论作为一个完整的新手。

我正在使用Susanli2016中的代码。

它对一个link起作用(尽管删除了属性“ language”),但对其他链接(对于example则无效了)

我收到错误:

select * from
(
select p.ID,p.ProductName, p.SalesPrice, pc.CategoryID, pic.BigPath,
row_number() over(partition by p.ID,p.ProductName order by pic.BigPath) as rn
from tbl_Products p
LEFT join tbl_ProductToCategory pc on p.ID = pc.ProductID
left outer join tbl_ProductImages pic on pic.ProductID = p.ID
where pc.CategoryID = 1174
)A where rn=1

(其中5,695是页面中的评论数)

我在这里附上代码,以防有人可以帮助我。

非常感谢! 西尔维娅

-

以下是完整的代码:

        Traceback (most recent call last):
      File "<pyshell#37>", line 4, in <module>
        items = scrape(url)
      File "<pyshell#13>", line 11, in scrape
        items = parse(session, url + '?filterLang=' + lang)
      File "<pyshell#18>", line 15, in parse
        num_reviews = int(num_reviews) # convert text into integer
    ValueError: invalid literal for int() with base 10: '5.695'


感谢所有评论者。我意识到在意大利和美国范例中存在的问题在于编写了千位分隔符(我们使用“。”,而美国人使用“,”)。

3 个答案:

答案 0 :(得分:3)

在尝试使用5.695将其强制转换为int之前,您似乎具有以下字符串来表示视图数num_reviews = int(num_reviews)

.中的5.695可能是千位分隔符。

因此,在使用.之前,请像这样删除int()

num_reviews = num_reviews.replace('.', '')
num_reviews = int(num_reviews)

答案 1 :(得分:0)

该错误是由于您试图转换的int中的句号引起的。为了确保它适用于所有键入格式,仅需要在转换为int之前过滤数字字符即可。

num_reviews = soup.find('span', class_='reviews_header_count').text # get text
num_reviews = num_reviews[1:-1] 
num_reviews = num_reviews.replace(',', '').replace('.','')
num_reviews = int(num_reviews)

或更通用的方式是,仅在字符串num_reviews

中包含数字字符

答案 2 :(得分:0)

您不能直接将其解析为整数值,在这种情况下,您首先将其转换为float,然后再将其转换为Int。

num_reviews = int(float(num_reviews))