鱼C论坛

 找回密码
 立即注册
查看: 1050|回复: 8

[已解决]爬取豆瓣 电影 标题问题

[复制链接]
发表于 2020-6-2 20:25:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问如何获取审查元素的电影名称,  我怎么是获得一个空列表?哪里错了了吗
最佳答案
2020-6-3 07:45:36

你看3L 啊  被无视的赶脚有点不舒服  这样改就可以了

豆瓣有的时候爬到的名称 不是在 a.span里  有的就在a里要加个判断  看代码吧
import requests
from bs4 import BeautifulSoup
import re


def open_url(url):
    hearders = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
    res = requests.get(url, headers=hearders)
    return res


def find_depth(res):
    pass


def biaoti(res):
    # 电影名字
    movies = []
    req = BeautifulSoup(res.text, 'html.parser')
    name = req.find_all('div', class_=['pl2'])
    for each1 in name:
        if not (each1.a.span):
            movies.append((each1.a.text).strip())
            continue
        movies.append(each1.a.span.text)
    print(movies)

    # 评分
    ranks = []
    rank = req.find_all('span', class_="rating_nums")
    for each2 in rank:
        ranks.append(each2.text)
    print(ranks)
    # 内容
    messages = []
    message = req.find_all("p", class_=['pl'])
    for each3 in message:
        messages.append(each3.text)

    result = []
    moveies_num = len(movies)
    for i in range(moveies_num):
        title = movies[i] + '->' + ranks[i] + '->' + messages[i] + '\n'
        result.append(title)
    print(result)
    return result


def main():
    url = 'https://movie.douban.com/chart'
    res = open_url(url)
    nr = biaoti(res)
    with open('豆瓣本周排行名单.txt','w',encoding='utf-8') as f:
        for a in nr:
            f.write(a+'\n')
main()
QQ图片20200602202345.png
QQ图片20200602202340.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 20:49:04 | 显示全部楼层
发下代码或网页url
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 21:05:23 | 显示全部楼层
改成这样:
req.find_all('div',class_=['pl2'])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-2 22:07:43 | 显示全部楼层
suchocolate 发表于 2020-6-2 20:49
发下代码或网页url
import requests
from bs4 import BeautifulSoup
import re

def open_url(url):
    hearders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
    res = requests.get(url,headers=hearders)
    return res

def find_depth(res):
    pass

def biaoti(res):
    #电影名字
    movies = []
    req = BeautifulSoup(res.text,'html.parser')
    name = req.find_all('div',class_=['p12'])
    for each1 in name:
        movies.append(each1.a.span.text)
    print(movies)

    #评分
    ranks =[]
    rank = req.find_all('span',class_="rating_nums")
    for each2 in rank:
        ranks.append(each2.text)
    print(ranks)
    #内容
    messages =[]
    message = req.find_all("p", class_="pl")
    for each3 in message:
        messages.append(each3.text)

    result =[]
    moveies_num = len(movies)
    for i in range(moveies_num):
        title = movies[i]+'->'+ranks[i]+'->'+messages[i]+'\n'
        result.append(title)
    print(result)
    return result

def main():
    url = 'https://movie.douban.com/chart'
    res = open_url(url)
    nr = biaoti(res)
    with open('豆瓣本周排行名单.txt','w') as f:
        for a in nr:
            f.write(nr)
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 23:21:10 | 显示全部楼层
你爬不爬的出来我不知道,但是div的class是等于pl2不是p12。如果你刚学爬虫建议写一点运行一点,不要一股脑写完
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 07:16:10 | 显示全部楼层

你代码错了,3l的是['pl2'] 你的是p12
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-3 07:45:36 | 显示全部楼层    本楼为最佳答案   

你看3L 啊  被无视的赶脚有点不舒服  这样改就可以了

豆瓣有的时候爬到的名称 不是在 a.span里  有的就在a里要加个判断  看代码吧
import requests
from bs4 import BeautifulSoup
import re


def open_url(url):
    hearders = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
    res = requests.get(url, headers=hearders)
    return res


def find_depth(res):
    pass


def biaoti(res):
    # 电影名字
    movies = []
    req = BeautifulSoup(res.text, 'html.parser')
    name = req.find_all('div', class_=['pl2'])
    for each1 in name:
        if not (each1.a.span):
            movies.append((each1.a.text).strip())
            continue
        movies.append(each1.a.span.text)
    print(movies)

    # 评分
    ranks = []
    rank = req.find_all('span', class_="rating_nums")
    for each2 in rank:
        ranks.append(each2.text)
    print(ranks)
    # 内容
    messages = []
    message = req.find_all("p", class_=['pl'])
    for each3 in message:
        messages.append(each3.text)

    result = []
    moveies_num = len(movies)
    for i in range(moveies_num):
        title = movies[i] + '->' + ranks[i] + '->' + messages[i] + '\n'
        result.append(title)
    print(result)
    return result


def main():
    url = 'https://movie.douban.com/chart'
    res = open_url(url)
    nr = biaoti(res)
    with open('豆瓣本周排行名单.txt','w',encoding='utf-8') as f:
        for a in nr:
            f.write(a+'\n')
main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-3 12:41:28 | 显示全部楼层
Twilight6 发表于 2020-6-3 07:45
你看3L 啊  被无视的赶脚有点不舒服  这样改就可以了

豆瓣有的时候爬到的名称 不是在 a.span里  有的 ...

我没有无视的,我觉得我没有把问题说清楚,索性直接上代码了。感谢大佬的细心解释,我代码中的还有很多错误 也一并帮我修正了 。同时也感谢其他大佬对我的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 12:44:23 | 显示全部楼层
费小牛 发表于 2020-6-3 12:41
我没有无视的,我觉得我没有把问题说清楚,索性直接上代码了。感谢大佬的细心解释,我代码中的 ...

没事  加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 22:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表