如何解决抓取后丢失数据
我正试图在IMDB电影的前250名收视率上抓取Google数据。
movie_list = top_250_imdb["Title"]
base_url = 'https://www.google.com/search?q='
streaming = []
title = []
price = []
for movie in movie_list:
query_url = (f'{base_url}{movie}')
browser.visit(query_url)
time.sleep(5)
soup = bs(browser.html,'lxml')
results1 = soup.find_all('div',class_ = 'ellip bclEt')
for result in results1:
streaming.append(result.text)
title.append(movie.capitalize())
results2 = soup.find_all('div',class_ = 'ellip rsj3fb')
for result in results2:
price.append(result.text)
在抓取后,我得到了len(streaming)
和len(title)
= 1297
但len(price)
= 1296
我无法创建DataFrame,因为它们的长度不同。
出了什么问题,我该如何解决?
解决方法
我认为价格中的一个值是NaN ... Idk如何解决,但您可能会获得帮助...
尝试创建仅包含价格的数据框...然后使用fillna函数填充NaN值,然后将该价格数据框与主数据框连接...。
有点长,但可能会起作用
,这里只需稍作更改即可监控缺失值...
results2 = soup.find_all('div',class_ = 'ellip rsj3fb')
for result in results2:
if result is not None :
p = None #u can even replace with 0 but for our convinience it is None here
else :
p = result.text
price.append(p)
现在您可以检查名为“价格”的列表的len,并且还会添加缺少的计数
u可以在将值追加到“流”和“标题”列表中的同时添加这段代码,以便在遇到任何缺失值时将其替换为提供的值,而不是放弃该操作。
只需将上面的代码替换为下面的代码,然后看一下缩进就可以了。
movie_list = top_250_imdb["Title"]
base_url = 'https://www.google.com/search?q='
streaming = []
title = []
price = []
for movie in movie_list:
query_url = (f'{base_url}{movie}')
browser.visit(query_url)
time.sleep(5)
soup = bs(browser.html,'lxml')
results1 = soup.find_all('div',class_ = 'ellip bclEt')
for result in results1:
streaming.append(result.text)
title.append(movie.capitalize())
results2 = soup.find_all('div',class_ = 'ellip rsj3fb')
for result in results2:
if result is not None :
p = None #u can even replace with 0 but for our convinience it is None here
else :
p = result.text
price.append(p)
希望这会有所帮助..
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。