鱼C论坛

 找回密码
 立即注册
查看: 6364|回复: 22

[技术交流] requests与Xpath 抓取豆瓣电影top250

[复制链接]
发表于 2021-6-27 10:30:26 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wcq15759797758 于 2021-6-27 13:54 编辑
# -*-coding:utf-8 -*-
from lxml import etree    # 导入etree子模块
import time               # 导入时间模块
import random             # 导入随机模块
import requests,json           # 导入网络请求模块


headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}

# 处理字符串中的空白符,并拼接字符串
def processing(strs):
    s = ''  # 定义保存内容的字符串
    for n in strs:
        n = ''.join(n.split())  # 去除空字符
        s = s + n  # 拼接字符串
    return s      # 返回拼接后的字符串

# 获取电影信息
def get_movie_info(url):
    response = requests.get(url,headers=headers)                    # 发送网络请求
    html = etree.HTML(response.text)                               # 解析html字符串
    div_all = html.xpath('//div[@class="info"]')
    for div in div_all:
        names = div.xpath('./div[@class="hd"]/a//span/text()')   # 获取电影名字相关信息
        name = processing(names)  # 处理电影名称信息
        infos = div.xpath('./div[@class="bd"]/p/text()')         # 获取导演、主演等信息
        info = processing(infos)  # 处理导演、主演等信息
        score = div.xpath('./div[@class="bd"]/div/span[2]/text()')      # 获取电影评分
        evaluation = div.xpath('./div[@class="bd"]/div/span[4]/text()') # 获取评价人数
        # 获取电影总结文字
        summary = div.xpath('./div[@class="bd"]/p[@class="quote"]/span/text()')
        print('电影名称:',name)
        print('导演与演员:',info)
        print('电影评分:',score)
        print('评价人数:',evaluation)
        print('电影总结:',summary)
        print('--------分隔线--------')

if __name__ == '__main__':
    for i in range(0,250,25):    # 每页25为间隔,实现循环,共10页
        # 通过format替换切换页码的url地址
        url = 'https://movie.douban.com/top250?start={page}&filter='.format(page=i)
        get_movie_info(url)                      # 调用爬虫方法,获取电影信息
        time.sleep(random.randint(1,2))          # 等待1至3秒随机时间

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 11:11:22 | 显示全部楼层

回帖奖励 +1 鱼币

xue学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-27 11:21:17 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 13:44:41 | 显示全部楼层

回帖奖励 +1 鱼币

你这一行设置传入两个参数
def get_movie_info(url,proxy):
但是后面又只传入一个参数
get_movie_info(url)   
如果把函数设置为只传入一个参数url就能成功运行了
def get_movie_info(url):
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-27 13:45:40 | 显示全部楼层
这是写错了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-6-27 13:53:17 | 显示全部楼层
本帖最后由 wcq15759797758 于 2021-6-27 13:54 编辑


忘记改了 我加了IP地址 我发论坛的时候删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-27 13:54:50 | 显示全部楼层
wcq15759797758 发表于 2021-6-27 13:53
忘记改了 我加了IP地址 我发论坛的时候删了

消息提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-27 13:55:54 | 显示全部楼层
wcq15759797758 发表于 2021-6-27 13:53
忘记改了 我加了IP地址 我发论坛的时候删了

还是很厉害的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-27 18:19:13 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 18:34:19 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 19:32:12 | 显示全部楼层

回帖奖励 +1 鱼币

ohhh~敲敲门~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-28 10:56:21 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-28 16:35:16 | 显示全部楼层

回帖奖励 +1 鱼币

嗯,不知道什么时候能像你一样,写出这么多的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-28 18:35:26 | 显示全部楼层
还能踢两年 发表于 2021-6-28 16:35
嗯,不知道什么时候能像你一样,写出这么多的代码

我也很菜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-29 14:09:00 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-30 14:04:12 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-30 16:21:15 | 显示全部楼层
涨芝士
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 13:16:40 | 显示全部楼层
學習一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-15 18:06:38 | 显示全部楼层
有几个问题不太明白,
        names = div.xpath('./div[@class="hd"]/a//span/text()')   # 获取电影名字相关信息
这里为什么span前面双斜杠呢?//div[@class="info"]和./div[@class="info"]有什么区别?希望大佬们指点指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-16 17:03:17 | 显示全部楼层
937135952 发表于 2021-8-15 18:06
有几个问题不太明白,这里为什么span前面双斜杠呢?//div[@class="info"]和./div[@class="info"]有什么区别 ...

a节点下的所有span节点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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