wcq15759797758 发表于 2021-6-27 10:30:26

requests与Xpath 抓取豆瓣电影top250

本帖最后由 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/text()')      # 获取电影评分
      evaluation = div.xpath('./div[@class="bd"]/div/span/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秒随机时间

fumun 发表于 2021-6-27 11:11:22

xue学习一下

超级玛尼哄 发表于 2021-6-27 11:21:17

{:10_254:}{:10_254:}

fish_nian 发表于 2021-6-27 13:44:41

你这一行设置传入两个参数
def get_movie_info(url,proxy):
但是后面又只传入一个参数
get_movie_info(url)   
如果把函数设置为只传入一个参数url就能成功运行了
def get_movie_info(url):

fish_nian 发表于 2021-6-27 13:45:40

{:10_257:}这是写错了么

wcq15759797758 发表于 2021-6-27 13:53:17

本帖最后由 wcq15759797758 于 2021-6-27 13:54 编辑

fish_nian 发表于 2021-6-27 13:45
这是写错了么

忘记改了 我加了IP地址 我发论坛的时候删了

wcq15759797758 发表于 2021-6-27 13:54:50

wcq15759797758 发表于 2021-6-27 13:53
忘记改了 我加了IP地址 我发论坛的时候删了

消息提醒

fish_nian 发表于 2021-6-27 13:55:54

wcq15759797758 发表于 2021-6-27 13:53
忘记改了 我加了IP地址 我发论坛的时候删了

{:10_298:}还是很厉害的

hornwong 发表于 2021-6-27 18:19:13

{:5_95:}

懒狗李 发表于 2021-6-27 18:34:19

{:10_254:}

chenyiyun 发表于 2021-6-27 19:32:12

ohhh~敲敲门~

秦南 发表于 2021-6-28 10:56:21

{:10_256:}

还能踢两年 发表于 2021-6-28 16:35:16

嗯,不知道什么时候能像你一样,写出这么多的代码

wcq15759797758 发表于 2021-6-28 18:35:26

还能踢两年 发表于 2021-6-28 16:35
嗯,不知道什么时候能像你一样,写出这么多的代码

我也很菜

Dragon910623 发表于 2021-6-29 14:09:00

世伊酱 发表于 2021-6-30 14:04:12

{:10_266:}

我是小白别骗我 发表于 2021-6-30 16:21:15

涨芝士

鄙人gdll 发表于 2021-8-13 13:16:40

學習一下

937135952 发表于 2021-8-15 18:06:38

有几个问题不太明白,      names = div.xpath('./div[@class="hd"]/a//span/text()')   # 获取电影名字相关信息这里为什么span前面双斜杠呢?//div[@class="info"]和./div[@class="info"]有什么区别?希望大佬们指点指点

wcq15759797758 发表于 2021-8-16 17:03:17

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

a节点下的所有span节点
页: [1] 2
查看完整版本: requests与Xpath 抓取豆瓣电影top250