Python 加快网页抓取速度

Python 加快网页抓取速度,python,html,web-scraping,beautifulsoup,html-parsing,Python,Html,Web Scraping,Beautifulsoup,Html Parsing,我有一个项目,我必须获得50名男女演员的所有收视率,这意味着我必须访问并获得大约3500个网页。这比我预期的时间要长,我正在寻找一种加快速度的方法。我知道有像scrapy这样的框架,但我希望在没有任何其他模块的情况下工作。有没有一种快速简单的方法来重写我的代码,或者这会花费太多的时间? 我的代码如下: def getMovieRatingDf(movie_links): counter = -1 movie_name = [] movie

我有一个项目,我必须获得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

只需查看代码就可以轻松确定主要瓶颈。它具有阻塞性。在处理当前页面之前,您不会下载/解析下一页

如果您想加快速度,请以非阻塞方式异步执行。这就是开箱即用的功能:

这里您注意到了Scrapy的一个主要优点:请求是 异步调度和处理这意味着Scrapy不会 需要等待请求完成和处理,它可以发送 另一个请求或同时做其他事情。这也意味着 即使某些请求失败或出现错误,其他请求也可以继续进行 处理它时会发生错误

另一个选项是从
请求
切换到,示例代码可在此处找到:


我们还可以在HTML解析阶段改进以下几点:

  • 切换到from
    html.parser
    (需要
    lxml
    ):

  • 用于仅分析文档的相关部分


只需查看代码即可轻松确定主要瓶颈。它具有阻塞性。在处理当前页面之前,您不会下载/解析下一页

如果您想加快速度,请以非阻塞方式异步执行。这就是开箱即用的功能:

这里您注意到了Scrapy的一个主要优点:请求是 异步调度和处理这意味着Scrapy不会 需要等待请求完成和处理,它可以发送 另一个请求或同时做其他事情。这也意味着 即使某些请求失败或出现错误,其他请求也可以继续进行 处理它时会发生错误

另一个选项是从
请求
切换到,示例代码可在此处找到:


我们还可以在HTML解析阶段改进以下几点:

  • 切换到from
    html.parser
    (需要
    lxml
    ):

  • 用于仅分析文档的相关部分


您似乎有不稳定的缩进,而Python在所有编程语言中都不喜欢不稳定的缩进。你贴的东西有用吗?返回的
不属于所示的
def
else:continue
和下面的行也没有正确缩进。您似乎有不稳定的缩进,而Python在所有编程语言中都不喜欢不稳定的缩进。你贴的东西有用吗?返回的
不属于所示的
def
else:continue
和以下行的缩进也不正确。
film_soup = BeautifulSoup(request.text, 'lxml')