【发布时间】:2016-06-14 15:32:14
【问题描述】:
我有一个项目,我必须抓取 50 位演员的所有评分,这意味着我必须访问和抓取大约 3500 个网页。这需要的时间比我预期的要长,我正在寻找一种加快速度的方法。我知道有像 scrapy 这样的框架,但我想在没有任何其他模块的情况下工作。是否有一种快速简便的方法来重写我的代码,或者这会花费太多时间吗? 我的代码如下:
def getMovieRatingDf(movie_links):
counter = -1
movie_name = []
movie_rating = []
movie_year = []
for movie in movie_links.tolist()[0]:
counter += 1
request = requests.get('http://www.imdb.com/' + movie_links.tolist()[0][counter])
film_soup = BeautifulSoup(request.text, 'html.parser')
if (film_soup.find('div', {'class': 'title_wrapper'}).find('a').text).isdigit():
movie_year.append(int(film_soup.find('div', {'class': 'title_wrapper'}).find('a').text))
# scrap the name and year of the current film
movie_name.append(list(film_soup.find('h1'))[0])
try:
movie_rating.append(float(film_soup.find('span', {'itemprop': 'ratingValue'}).text))
except AttributeError:
movie_rating.append(-1)
else:
continue
rating_df = pd.DataFrame(data={"movie name": movie_name, "movie rating": movie_rating, "movie year": movie_year})
rating_df = rating_df.sort_values(['movie rating'], ascending=False)
return rating_df
【问题讨论】:
-
你似乎有不稳定的缩进,而 Python,在所有编程语言中,都不喜欢不稳定的缩进。你粘贴的东西有用吗?
return不属于所示的def。else: continue和以下行也没有正确缩进。
标签: python html web-scraping beautifulsoup html-parsing