首页 > 解决方案 > 提取后如何抓取网页中不同链接的数据以及添加条件?

问题描述

我有一个项目,需要我使用某个网站从 2010 年到现在抓取所有埃及电影,并使用 beautifulsoup 形成一个包含数据库(电影、演员、用户评分、家庭评分等)所需的表的 csv 文件. 问题是所需的数据在我提取的每个电影链接中,但我需要知道的是如何爬取每个链接中的数据。我需要添加的条件是我只想要电影和某些数据,例如上述(电影、演员、用户评分、家庭评分等)。

parser = 'html.parser' 
resp = urllib.request.urlopen("https://elcinema.com/en/index/work/country/eg")
soup = BeautifulSoup(resp, parser, from_encoding=resp.info().get_param('charset'))

for link in soup.find_all('a', href=True):
    print(link['href'])

注意:我知道您关心专业精神,并且我尝试按照说明进行操作。另外,我还在学习,关于这方面的资料很少。

标签: pythondatabasecsvbeautifulsoupjupyter-notebook

解决方案


您应该将代码保留在函数中 - 即。parse_movie(url)parse_main_page()然后你可以在parse_movie(url)里面parse_main_page()运行link['href']


我可能看起来像这样 - 它需要获取电影详细信息并保存在文件中的代码,但我没有测试它。

import urllib
from bs4 import BeautifulSoup

parser = 'html.parser' 

# --- functions ---

def parse_movie(url):

    resp = urllib.request.urlopen(url)
    soup = BeautifulSoup(resp, parser, from_encoding=resp.info().get_param('charset'))

    movie = []
    
    # ... code to get movie details ...
    # ... (movie, cast, user rating, family rating, etc.) ...

    return movie
    
    
def parse_main_page():

    resp = urllib.request.urlopen("https://elcinema.com/en/index/work/country/eg")
    soup = BeautifulSoup(resp, parser, from_encoding=resp.info().get_param('charset'))

    all_movies = []
    
    for link in soup.find_all('a', href=True):
        movie = parse_movie( "https://elcinema.com" + link['href'] )
        all_movies.append(movie)
        
    return all_movies

# --- main ---

all_movies = parse_main_page()

print(all_movies)

# ... code to write `all_movies` in file ...

现在你应该阅读BeautifulSoup的文档,因为它有很多功能和选项。


推荐阅读