鱼C论坛

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

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

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

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

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

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


  6. 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'}

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

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

  34. if __name__ == '__main__':
  35.     for i in range(0,250,25):    # 每页25为间隔,实现循环,共10页
  36.         # 通过format替换切换页码的url地址
  37.         url = 'https://movie.douban.com/top250?start={page}&filter='.format(page=i)
  38.         get_movie_info(url)                      # 调用爬虫方法,获取电影信息
  39.         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 鱼币

你这一行设置传入两个参数
  1. def get_movie_info(url,proxy):
复制代码

但是后面又只传入一个参数
  1. get_movie_info(url)   
复制代码

如果把函数设置为只传入一个参数url就能成功运行了
  1. 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 | 显示全部楼层
有几个问题不太明白,
  1.         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-4-19 02:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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