仅从网站中提取所需的列

Posted

技术标签:

【中文标题】仅从网站中提取所需的列【英文标题】:Extract only desired columns from a website 【发布时间】:2021-04-04 12:17:06 【问题描述】:

我有这个代码,它从 imdb 中删除了这些数据:前 250 部电影、字段名称、年份和评级.. 我试图弄清楚如何只提取布拉德皮特所在的电影,我已经搜索了很多类似的问题,但没有一个真正有帮助,感谢您的任何贡献!

import re
import requests
from bs4 import BeautifulSoup
url = 'http://www.imdb.com/chart/top'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

movies = soup.select('td.titleColumn')
links = [a.attrs.get('href') for a in soup.select('td.titleColumn a')]
crew = [a.attrs.get('title') for a in soup.select('td.titleColumn a')]
ratings = [b.attrs.get('data-value') for b in soup.select('td.posterColumn span[name=ir]')]
votes = [b.attrs.get('data-value') for b in soup.select('td.ratingColumn strong')]
imdb = []
for index in range(0, len(movies)):
    movie_string = movies[index].get_text()
    movie = (' '.join(movie_string.split()).replace('.', ''))
    movie_title = movie[len(str(index)) + 1:-7]
    year = re.search('\((.*?)\)', movie_string).group(1)
    place = movie[:len(str(index)) - (len(movie))]
    data = "movie_title": movie_title,
            "year": year,
            "place": place,
            "star_cast": crew[index],
            "rating": ratings[index],
            "vote": votes[index],
            "link": links[index]
    imdb.append(data)

for item in imdb:
    print(item['place'], '-', item['movie_title'], '(' + item['year'] + ') -', 'Starring:', item['star_cast'])

【问题讨论】:

您应该能够使用简单的 if 语句来解决这个问题……您尝试了什么? 此外,您可以更改 URI 以查看 onlypit 电影:imdb.com/name/nm0000093/videogallery?ref_=nm_phs_vi 寻找代码示例,尝试调试您拥有的代码并查看每一步的结果,并将其与您期望看到的结果进行比较。 @PatrickArtner 我是初学者,我不知道该怎么做,谢谢你帮助我!! 【参考方案1】:

后处理您的 idmb 列表,您可以执行以下操作,以在 star_cast 中使用 brad pitt 获取所有结果:

for item in imdb:
    if item['star_cast'].find('Brad Pitt') !=-1:
        print(item['place'], '-', item['movie_title'], '(' + item['year'] + ') -', 'Starring:', item['star_cast'])

输出

11 - Fight Club (1999) - Starring: David Fincher (dir.), Brad Pitt, Edward Norton
20 - Sieben (1995) - Starring: David Fincher (dir.), Morgan Freeman, Brad Pitt
85 - Inglourious Basterds (2009) - Starring: Quentin Tarantino (dir.), Brad Pitt, Diane Kruger
105 - Snatch - Schweine und Diamanten (2000) - Starring: Guy Ritchie (dir.), Jason Statham, Brad Pitt

【讨论】:

以上是关于仅从网站中提取所需的列的主要内容,如果未能解决你的问题,请参考以下文章

如何从图像中提取所需的文本部分,而不是使用 OCR 提取图像中的所有文本?

如何减少提取文件所需的时间?

如何解析URL并提取所需的子字符串

Perl 正则表达式变量替换打印 1 而不是所需的提取

无法提取所需的文本部分并从某些元素中删除其余部分

每组所需的最大行数