• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

scrapy的极快上手使用

武飞扬头像
克豪
帮助5

参考资料

scray中文文档

创建scrapy项目

scrapy startproject myproject [project_dir]
myproject:项目名
project_dir:项目存储的位置 可以不填 不填的时候就是在当前目录创建myproject文件夹作为项目的目录

创建爬虫

在创建完目录之后需要先进入到项目目录

cd project_dir
scrapy genspider mydomain mydomain.com

mydomain:就是爬虫名
mydomain.com: 就是爬虫可以爬取的目录名 他会在新生成的文件里面的参数里面体现

编写爬虫程序

预先准备

学新通

代码结构

学新通
爬虫里面是得到请求的链接 和 从对应的链接中抽取数据项和得到新的请求链接 给pipelines存储数据
items是抽取出来的数据项的定义 它定义一些确定的字段 如果使用了确定的字段之外的字段会报错的 其实也可以直接使用字典类型

爬虫文件

默认内容:

import scrapy

class BaiduSpider(scrapy.Spider):
    name = '百度'
    allowed_domains = ['百度.com']
    start_urls = ['http://百度.com/']

    def parse(self, response):
        pass

name:爬虫名
allowed_domains:爬虫被运行访问的地址(避免爬取到其他页面的数据,也可以不填写该项)
start_urls:表示初始是需要被爬取的链接的列表
def parse(self, response):对于url获取的响应的处理,比如从页面中获取到数据封装到item

例子

以爬取百度新闻为例 http://news.百度.com/
假设要获取热点新闻
学新通
修改文件内容

import scrapy

class BaiduSpider(scrapy.Spider):
    name = '百度'
    allowed_domains = ['百度.com']
    start_urls = ['http://news.百度.com/']

    def parse(self, response):
        links = response.xpath(r'//*[@id="left-col-wrapper"]/div[3]//a')
        item ={}
        for i in links:
            item['title'] = i.xpath(".//text()").get()
            item['link'] = i.xpath(".//@href").get()
            print(item)

更改一下setting.py
添加下面的代码

ROBOTSTXT_OBEY = False # 不遵守robot.txt
LOG_LEVEL = 'WARNING'#日志的等级

然后在命令行输入scrapy crawl 百度
百度就是之前那个爬虫名字
结果
学新通

pipelines文件

修改setting.py配置一下pipeline文件

ITEM_PIPELINES = {
   'tutorial.pipelines.TutorialPipeline': 300,
}

pipelines文件就是用于对item进行处理的
修改piplines文件

from itemadapter import ItemAdapter

class TutorialPipeline:
    def process_item(self, item, spider):
        # 这里可以设置成存储为文件或者存到数据库 我这里只是简单的输出一下
        print(item)
        return item

修改 爬虫文件

class BaiduSpider(scrapy.Spider):
    name = '百度'
    allowed_domains = ['百度.com']
    start_urls = ['http://news.百度.com/']

    def parse(self, response):
        links = response.xpath(r'//*[@id="left-col-wrapper"]/div[3]//a')
        item ={}
        for i in links:
            item['title'] = i.xpath(".//text()").get()
            item['link'] = i.xpath(".//@href").get()
            yield item

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfigbei
系列文章
更多 icon
同类精品
更多 icon
继续加载