Python scrapy爬虫框架爬取虎扑标题

本文将介绍使用scrapy爬取虎扑话题区的标题的过程

  1. 安装scrapy
    可以使用pip安装或者在pycharm中解释器设置中安装

  2. 创建一个scrapy项目
    使用命令行工具切换至想要创建项目的目录,然后执行命令

    scrapy startproject hupu
    

    随后使用pycharm打开所创建的项目,即可看到自动生成了以下文件夹和文件


    1.png

注意spiders文件夹下的hupucrawl.py是我们自己手动创建的,随后我们将在此编写爬虫主程序

  1. 配置爬虫
    对于一个简单的爬虫,我们只需要编写爬虫主程序,配置items文件即可

    • 配置items

      # -*- coding: utf-8 -*-
      
      # Define here the models for your scraped items
      #
      # See documentation in:
      # https://docs.scrapy.org/en/latest/topics/items.html
      
      import scrapy
      
      
      class HupuItem(scrapy.Item):
          # define the fields for your item here like:
          # name = scrapy.Field()
          topic=scrapy.Field()
      
      

      在items文件中已经生成了框架和帮助信息,我们只需要按照提示,添加topic=scrapy.Field()即可,用于接收对话题的爬取结果,可根据需要添加更多对象

    • 编写主程序
      主程序需要我们在spiders文件夹下手动创建文件进行编写,先看代码,再进行解释

      from scrapy import Request
      from scrapy.spiders import Spider
      from hupu.items import HupuItem
      
      class HupuSpider(Spider):
          name='hs'
          headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'}
          allowed_domains=['hupu.com']
          start_urls=['https://bbs.hupu.com/vote']
          page=2
      
      
          def parse(self, response):
      
              lines = response.xpath(
                  "//ul[@class='for-list']/li/div[@class='titlelink box']/a[@class='truetit']/text()").extract()
              for line in lines:
                  item = HupuItem()
                  item['topic'] = line
                  yield item
      
      
              while self.page<6:
                  next_url='https://bbs.hupu.com/vote-'+str(self.page)
                  self.page+=1
                  yield Request(next_url,callback=self.parse)
      
      
      • 导入需要的文件

      • 创建一个HupuSpider的类,可以配置爬虫的基本信息

        • name 是爬虫的名字,在启动爬虫时需要用的,不要混淆
        • headers 配置爬虫的请求头,可以绕过一般的反爬虫机制
        • allowed_domains 表示允许爬虫的域名
        • start_urls 表示爬虫的起始URL
        • page 设置一个变量用于后续的翻页
      • 定义parse函数对网页内容进行解析

        • lines = response.xpath(
                      "//ul[@class='for-list']/li/div[@class='titlelink box']/a[@class='truetit']/text()").extract()
                  
          

          使用xpath语法提取内容,可以使用浏览器的检查元素功能得到要爬取的内容在网页源代码中的位置,更简单的方法是找到目标后右键直接copy xpath

          2.png
   - 在得到lines这个列表之后,就可以使用for循环,逐一将内容返回到创建的item中去,注意要使用yield进行返回,它表示返回后程序仍将继续执行

   - 设置翻页,本文将爬取前五页,可以利用先前设置的page变量进行循环拼接出下一页的url,同样要使用yield进行返回
  1. 使用命令行启动爬虫

    scrapy crawl hs -o result.csv
    

    表示启动的爬虫名字是hs,将结果输出到result.csv中

  2. 后续处理
    此时我们已经得到了需要的内容,可以根据需要对数据进行下一步处理

你可能感兴趣的:(Python scrapy爬虫框架爬取虎扑标题)