python - 如何在 div 另一个标签中提取 span 标签

标签 python html beautifulsoup

我使用 Beautiful Soup 在 Python 中编写了一段代码,用于从 IMDB 中提取用户名及其评分。但是有很多用户没有给他们的评论打分。很难将评级与他们的评论准确对应起来。那么我该怎么做呢? http://www.imdb.com/title/tt2866360/reviews?ref_=tt_ov_rt 在此网址中,评论不会分配评级。

url1 ="http://www.imdb.com/title/tt2866360/reviews?ref_=tt_ov_rt"

response = requests.get(url1, headers=headers)

page=response.content

soup=BeautifulSoup(page)

for k in soup.findAll('div',{"class":"load-more-data"}):

    if k.name == 'span' and m['class'] == "rating-other-user-rating":
        print blah()
    else:
        print blah 1()

这是检查评分部分是否存在于评论部分的代码,但它没有返回任何东西?

最佳答案

您要查找的信息(用户名、评分)位于“div.review-container”标签中。
对于没有评级的标签,您可以忽略它们。

for k in soup.find_all('div',{"class":"review-container"}):
    rating = k.find('span', class_='rating-other-user-rating')
    if rating:
        rating = ''.join(i.text for i in rating.find_all('span')[-2:])
    name = k.find('span', class_='display-name-link').text
    print name, rating

当您按下 Load More 按钮时显示的信息是通过 XHR 请求加载的。
您会在“div.load-more-data”标签中找到执行请求所需的所有数据。

load_more = soup.find('div', class_='load-more-data')
url = 'http://www.imdb.com{}?paginationKey={}'.format(
    load_more['data-ajaxurl'], load_more['data-key']
    )
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')

只需重复上述过程,直到获得所有信息。


import requests
from bs4 import BeautifulSoup

url = "http://www.imdb.com/title/tt2866360/reviews?ref_=tt_ov_rt"
ajax_url = url.split('?')[0] + "/_ajax?paginationKey={}"
reviews = []

while True:
    r = requests.get(url)
    soup = BeautifulSoup(r.content, 'html.parser')

    for k in soup.find_all('div',{"class":"review-container"}):
        rating = k.find('span', class_='rating-other-user-rating')
        if rating:
            rating = ''.join(i.text for i in rating.find_all('span')[-2:])
        name = k.find('span', class_='display-name-link').text
        reviews.append([name, rating])
        print name, rating

    load_more = soup.find('div', class_='load-more-data')
    if not load_more:
        break
    url = ajax_url.format(load_more['data-key'])

关于python - 如何在 div 另一个标签中提取 span 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303583/

相关文章:

html - 在 asp.net 中使底部页脚居中对齐

python - 在 Beautifulsoup Python 上排除不需要的标签

python - 使用 BeautifulSoup 将内容添加到 iframe

python - opencv python 中的轮廓近似每次都会给出错误的结果

HTML 切换显示和隐藏

python - 如何在后台(守护进程)重复播放python脚本中的短mp3文件?

html - 这个选择器是错误的还是低效的?

python - BeautifulSoup 和 Scrapy 爬虫的区别?

python - 没有 virtualenv 无法启动 uWSGI 服务器(ImportError)

python - 如何在 python 中将元组转换为字符串并返回/如何在网页上编辑关联数组