python - 提取后如何抓取网页中不同链接的数据以及添加条件?
问题描述
我有一个项目,需要我使用某个网站从 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'])
注意:我知道您关心专业精神,并且我尝试按照说明进行操作。另外,我还在学习,关于这方面的资料很少。
解决方案
您应该将代码保留在函数中 - 即。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的文档,因为它有很多功能和选项。
推荐阅读
- android - 如何在 Flutter 上使用 cookie 发出 http 请求?
- typescript - Angular 中的条件验证
- r - R DataExplorer 包 - 无法使用函数
- php - 一行中的 get() + sum() laravel
- javascript - 取消导航时的Vue-router回调
- apache-spark - Spark - 简单线性回归
- python - python中的函数不返回分配给变量的最新字符串值
- c++ - 需要帮助编写 for 循环以在字符串周围创建边框
- r - 合并R中的两个数据框并附加一列
- python - 处理从文件读取的文件名中的反斜杠转义