关键词搜索

源码搜索 ×
×

python爬取豆瓣电影top250

发布2021-02-26浏览649次

详情内容

1、分析网页
当我们去爬取网页时,首先要做的就是先分析网页结构,然后就会发现相应的规律,如下所示:
在这里插入图片描述

生成链接:从网页链接的规律中可得写一个for循环即可生成它的链接,其中它的间隔为25,程序如下:

for page in range (0,226,25):
    url ="https://movie.douban.com/top250?start=%s&filter="%page
    print (url)

    得到的结果如下:
    在这里插入图片描述

    2、请求服务器
    在爬取网页之前,我们要向服务器发出请求

    2.1导入包
    没有安装requests包的要先进行安装,步骤为:1.win+R运行——2.cmd回车——3.输入命令pip install requests

    2.2设置浏览器代理
    在这里插入图片描述

    设置浏览器代理的代码如下:

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

      2.3请求服务器格式
      请求源代码,向服务器发出请求,如果在后面加上.text表示输出文本内容,代码如下图所示:

      requests.get(url = test_url, headers = headers)
      
      • 1

      2.4请求服务器代码汇总

      import requests
      #pip安转 pip install requests————>win+r,运行————>cmd,回车,————>pip
      test_url = 'https://movie.douban.com/top250?start=0&filter=' #''格式化,为字符串
      
      #设置浏览器代理,它是一个字典
      headers = {
          'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
      }
      
      #请求源代码,向服务器发出请求,200代表成功
      reponse = requests.get(url = test_url, headers = headers).text
      # 快捷键运行,Ctrl+Enter
      
        4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      3.xpath提取信息
      3.1获取xpath节点的方法
      在这里插入图片描述

      3.2xpath提取内容

      from lxml import etree #导入解析库
      html_etree = etree.HTML(reponse) # 看成一个筛子,树状
      
      • 1
      • 2

      3.2.1提取文本
      当我们在提取标签内的文本时,要在复制的xpath后面加上/text()
      如《霸王别姬》:

      <span class="title">霸王别姬</span>
      xpath为:
      
      //*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]
      提取文字:
      
      name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
      print ("这是数组形式:",name)
      print ("这是字符串形式:",name[0])
      
        4
      • 5
      • 6
      • 7
      • 8
      • 9

      3.2.2提取链接
      我们在提取链接时,需要在复制到的xpath后面加上/@href , 指定提取链接,

      movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
      print ("这是数组形式:",movie_url)
      print ("这是字符串形式:",movie_url[0])
      

        结果如下:
        在这里插入图片描述

        3.2.3提取标签元素
        提取标签元素和提取链接的方法一样,不过要在后面加上 /@class 就可以了,

        rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')
        print ("这是数组形式:",rating)
        print ("这是字符串形式:",rating[0])
        

          结果如下:
          在这里插入图片描述

          4.正则表达式
          4.1提取固定位置的信息
          正则表达式中用(.*?)来提取我python基础教程们想要的信息,在使用正则表达式时,通常要先导入re这个包,举例如下:

          import re
          test = "我是js"
          text = re.findall("我是.*?",test)
          print (text)
          
            4

          结果如下:
          在这里插入图片描述

          4.2匹配出数字
          比如说我们要匹配出有多少人评价这部电影,我们可以这样写:

          import re 
          data = "1059232人评价"
          num = re.sub(r'\D', "", data)
          print("这里的数字是:", num)
          
            4

          结果如下:
          在这里插入图片描述

          5、提取一页中的所有信息
          比如说我们这里提取最后一页的电影名称,如下:

          li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
          for item in li:
              name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
              print (name)
          
            4

          结果如下:
          在这里插入图片描述

          按照这种方法,我们可以把所有的都爬取下来。

          6、把内容写入文本csv
          代码如下:

          import csv
          # 创建文件夹并打开
          fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
          writer = csv.writer(fp) #我要写入
          
          # 写入内容
          writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))
          
          #关闭文件
          fp.close()
          
          7、把所有代码汇总
          import requests, csv, re
          from lxml import etree
          
          #设置浏览器代理,它是一个字典
          headers = {
              'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
          }
          
          # 创建文件夹并打开
          fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
          writer = csv.writer(fp) #我要写入
          # 写入内容
          writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))
          
          for page in range(0, 226, 25): #226
              print ("正在获取第%s页"%page)
              url = 'https://movie.douban.com/top250?start=%s&filter='%page
              
              #请求源代码,向服务器发出请求,200代表成功,回退对其,Ctrl+]
              reponse = requests.get(url = url, headers = headers).text
              # 快捷键运行,Ctrl+Enter
              html_etree = etree.HTML(reponse) # 看成一个筛子,树状
              # 过滤
              li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
              for item in li:
                  #排名
                  rank = item.xpath('./div/div[1]/em/text()')[0]
                  #电影名称
                  name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
                  #链接
                  dy_url = item.xpath('./div/div[2]/div[1]/a/@href')[0]
                  #评分
                  rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]
                  rating = re.findall('rating(.*?)-t', rating)[0]
                  if len(rating) == 2:
                      star = int(rating) / 10  #int()转化为数字
                  else:
                      star = rating
              #     注释ctrl+?
          
                  rating_num = item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0]
                  content = item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]
                  content = re.sub(r'\D', "", content)
          #         print (rank, name, dy_url, star, rating_num, content)
                  # 写入内容
                  writer.writerow((rank, name, dy_url, star, rating_num, content))
          fp.close()
          
            4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39
          • 40
          • 41
          • 42
          • 43
          • 44
          • 45
          • 46
          • 47
          • 48
          • 49
          • 50
          • 51
          • 52
          • 53
          • 54
          • 55
          • 56
          • 57
          • 58
          • 59

          结果如下:
          在这里插入图片描述

          csv文件中的结c#教程果:
          在这里插入图片描述

          最后爬取结束。

          相关技术文章

          最新源码

          下载排行榜

          点击QQ咨询
          开通会员
          返回顶部
          ×
          微信扫码支付
          微信扫码支付
          确定支付下载
          请使用微信描二维码支付
          ×

          提示信息

          ×

          选择支付方式

          • 微信支付
          • 支付宝付款
          确定支付下载