scrapy爬虫框架

爬虫中间件(Spider Middlewares)
位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入(即responses)和输出(即requests)

执行顺序:爬虫把要爬的url转发给引擎,引擎再转发给调度器,由调度器决定顺序,返回给引擎,引擎再把要爬取的url通过下载中间件(用于加个头,cookie啥的)向需要爬取的服务端发送请求,响应回来之后也通过下载中间件给引擎,引擎判断是响应数据之后,转发给爬虫,爬虫对数据进行处理,返回一个新的需要爬的地址(就继续上面的流程)或者需要保存的数据,数据部分由引擎转发给管道,保存数据

目录介绍

firstscrapy  # 项目名字
    firstscrapy # 包
        -spiders # 所有的爬虫文件放在里面
            -baidu.py # 一个个的爬虫(以后基本上都在这写东西)
            -chouti.py
        -middlewares.py # 中间件(爬虫,下载中间件都写在这)
        -pipelines.py   # 持久化相关写在这(items.py中类的对象)
        -main.py        # 自己加的,执行爬虫
        -items.py       # 一个一个的类,
        -settings.py    # 配置文件
    scrapy.cfg          # 上线相关

settings参数介绍

1 默认情况,scrapy会去遵循爬虫协议
2 修改配置文件参数,强行爬取,不遵循协议
-ROBOTSTXT_OBEY = False
3 USER_AGENT = ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
4 LOG_LEVEL=‘ERROR’ # 运行的时候就不会把其他日志展示出来
三、基本使用
1 基本命令

创建项目

scrapy startproject firstscrapy

创建爬虫

scrapy genspider 爬虫名 爬虫地址
scrapy genspider chouti dig.chouti.com

一执行就会在spider文件夹下创建出一个py文件

运行爬虫

scrapy crawl chouti # 带运行日志
scrapy crawl chouti --nolog # 不带日志

支持右键执行爬虫

在项目路径下新建一个main.py

from scrapy.cmdline import execute
execute([‘scrapy’,‘crawl’,‘chouti’])
2 数据解析
#xpath:
-response.xpath(’//a[contains(@class,“link-title”)]/text()’).extract() # 取文本
-response.xpath(’//a[contains(@class,“link-title”)]/@href’).extract() #取属性
#css
-response.css(’.link-title::text’).extract() # 取文本
-response.css(’.link-title::attr(href)’).extract_first() # 取属性

3 数据持久化
items.py

持久化匹配的字段

class ChoutiItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
laiyuan = scrapy.Field()
spiders/chouti.py

import scrapy

class ChoutiSpider(scrapy.Spider):
name = ‘chouti’
allowed_domains = [‘dig.chouti.com’]
start_urls = [‘http://dig.chouti.com/’]

def parse(self, response):
    # 返回要爬取的页面,或者返回要保存的数据
    # 下面两者效果相同
    from pachong.items import ChoutiItem
    item = ChoutiItem()
    div_list = response.css('.link-con .link-item')
    # div_list = response.xpath('//div[contains(@class,"link-item")]')
    for div in div_list:
        title = div.css('.link-title::text').extract_first()
        laiyuan = div.css('.link-from::text').extract_first()
        # title = div.xpath('//a[contains(@class,"link-title")]/text()').extract()
        if not laiyuan:
            laiyuan = ''
        print(title,laiyuan)
        item['title'] = title
        item['laiyuan'] = laiyuan
        yield item

pipelines.py

import pymysql
class PachongPipeline:
def open_spider(self,spider):
self.conn = pymysql.connect(host=‘127.0.0.1’, user=‘root’, password=“root”,
database=‘pachong’, port=3306)

def process_item(self, item, spider):
    cursor = self.conn.cursor()
    sql = 'insert into chouti (title,laiyuan)values(%s,%s)'
    cursor.execute(sql,[item['title'],item['laiyuan']])
    self.conn.commit()
    return item

def close_spider(self,spider):
    self.conn.close()

settings.py

ITEM_PIPELINES = {
‘pachong.pipelines.PachongPipeline’: 300,
}
龙华大道1号http://www.kinghill.cn/LongHuaDaDao1Hao/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值