zoukankan      html  css  js  c++  java
  • python Scrapy 爬虫框架快速入门

    快速入门安装
    pip install scrapy
    一、创建Scrapy项目
    scrapy startproject Tencent
    命令执行后,会创建一个Tencent文件夹,结构如下
    ls
    Tencent/
    scrapy.cfg
    Tencent/
      __init__.py
      items.py
      pipelines.py
      settings.py
      spiders/
        __init__.py
        爬取.py
        ....
    文件说明
        scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)
        items.py 设置数据存储模板,用于结构化数据,如:Django的Model
        pipelines 数据处理行为,如:一般结构化的数据持久化
        settings.py 配置文件,如:递归的层数、并发数,延迟下载等
        spiders 爬虫目录,如:创建文件,编写爬虫规则
    二、编写items.py文件,根据需要爬取的内容定义爬取字段
    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间。
    # -*- coding: utf-8 -*-
    import scrapy
    class TencentItem(scrapy.Item):
    # 职位名
    positionname = scrapy.Field()
    # 详情连接
    positionlink = scrapy.Field()
    # 职位类别
    positionType = scrapy.Field()
    # 招聘人数
    peopleNum = scrapy.Field()
    # 工作地点
    workLocation = scrapy.Field()
    # 发布时间
    publishTime = scrapy.Field()
    三、编写spider文件
    进入Tencent目录,使用命令创建一个基础爬虫类:
    # tencentPostion为爬虫名,tencent.com为爬虫作用范围
    scrapy genspider tencentPostion "tencent.com"
    执行命令后会在spiders文件夹中创建一个tencentPostion.py的文件,现在开始对其编写:
    # -*- coding: utf-8 -*-
    import scrapy
    from tencent.items import TencentItem
    class TencentpositionSpider(scrapy.Spider):
    """
    功能:爬取腾讯社招信息
    """
    # 爬虫名
    name = "tencentPosition"
    # 爬虫作用范围
    allowed_domains = ["tencent.com"]
    url = "http://hr.tencent.com/position.php?&start="
    offset = 0
    # 起始url
    start_urls = [url + str(offset)]
    def parse(self, response):
    for each in response.xpath("//tr[@class='even'] | //tr[@class='odd']"):
    # 初始化模型对象
    item = TencentItem()
    # 职位名称
    item['positionname'] = each.xpath("./td[1]/a/text()").extract()[0]
    # 详情连接
    item['positionlink'] = each.xpath("./td[1]/a/@href").extract()[0]
    # 职位类别
    item['positionType'] = each.xpath("./td[2]/text()").extract()[0]
    # 招聘人数
    item['peopleNum'] = each.xpath("./td[3]/text()").extract()[0]
    # 工作地点
    item['workLocation'] = each.xpath("./td[4]/text()").extract()[0]
    # 发布时间
    item['publishTime'] = each.xpath("./td[5]/text()").extract()[0]
    yield item
    if self.offset < 1680:
    self.offset += 10
    # 每次处理完一页的数据之后,重新发送下一页页面请求
    # self.offset自增10,同时拼接为新的url,并调用回调函数self.parse处理Response
    yield scrapy.Request(self.url + str(self.offset), callback = self.parse)
    四、编写pipelines文件
    # -*- coding: utf-8 -*-
    import json
    class TencentPipeline(object):
    """
    功能:保存item数据
    """
    def __init__(self):
    self.filename = open("tencent.json", "w")
    def process_item(self, item, spider):
    text = json.dumps(dict(item), ensure_ascii = False) + ", "
    self.filename.write(text.encode("utf-8"))
    return item
    def close_spider(self, spider):
    self.filename.close()
    五、settings文件设置(主要设置内容)
    # 设置请求头部,添加url
    DEFAULT_REQUEST_HEADERS = {
    "User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;",
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    }
    # 设置item——pipelines
    ITEM_PIPELINES = {
    'tencent.pipelines.TencentPipeline': 300,
    }
    执行命令,运行程序
    # tencentPosition为爬虫名
    scrapy crwal tencentPosition
    学习https://blog.csdn.net/langshanglibie/article/details/79171657
  • 相关阅读:
    Eclipse中创建新的Spring Boot项目
    解决win下无法ping通VM虚拟机CentOS系统的方法
    32位centos下安装jdk1.7报Permission denied处理方式
    Windows下安装HBase
    15个nosql数据库
    查看软件的安装路径
    IP地址 网段的划分
    签名算法
    CentOS开启FTP及配置用户
    CentOS 5.5安装SVN(Subversion)
  • 原文地址:https://www.cnblogs.com/Lijcyy/p/9779196.html
Copyright © 2011-2022 走看看