Python+PyCharm+Scrapy+MySQL+SQLAlchemy爬虫项目快速搭建(包括自定义Pipeline和自定义ImagesPipeline)

Scrapy框架

Scrapy是一个用于抓取网站和提取结构化数据的应用程序框架,可用于广泛实用的应用程序,如数据挖掘、信息处理或历史存档。

尽管Scrapy最初是为web数据抓取而设计的,但它也可以使用API来提取数据(如Amazon Associates Web Services)或把它当作通用网络爬虫。

一、安装

  1. 支持的Python版本
    Python 3.6+
  2. 安装/升级命令
  • 安装:
 pip install Scrapy
  • 升级:
pip install -U Scrapy

二、创建爬虫工程

  1. 打开PyCharm创建一个空项目
    输入项目名称
    点击创建
    在这里插入图片描述

  2. 打开PyCharm自带的Terminal
    在这里插入图片描述

  3. 输入命令回到上一层目录

cd ..
  1. 创建Scrapy工程
scrapy startproject <project_name> [project_dir]

例:

scrapy startproject pythonProject pythonProject

project_dir下创建一个project_name工程
如果未指定project_name,它会与project_dir相同
创建完成后按照提示进入工程目录

cd pythonProject
  1. 工程目录下创建爬虫
scrapy genspider [-t template] <name> <domain>

例:

scrapy genspider mySpider target.url.com

支持模板:basic(默认)、crawl、csvfeed、xmlfeed
这里name是爬虫的名字;domain是设置allowed_domains以及start_urls,这两个属性可以在爬虫类中修改

三、编写爬虫

1. 编写items

根据网页确定好要爬取的字段,然后在items.py中编写继承了scrapy.Item的类,可以根据情况自定义多个类(都要继承scrapy.Item
以新闻为例,我想爬取新闻的文本内容与图片:

import scrapy

class NewsItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    article_id = scrapy.Field()
    media = scrapy.Field()
    url = scrapy.Field()
    title = scrapy.Field()
    tags = scrapy.Field()
    content = scrapy.Field()
    publish_time = scrapy.Field()
    images = scrapy.Field() # 存放下载下来的磁盘路径
    images_urls = scrapy.Field() # 存放要访问的远程路径

2. 编写spider

爬虫是scrapy的主体,在这个部分完成页面数据的抓取。爬虫需要注意的是网站的反爬虫策略,并根据需要绕过反爬虫策略。有些网站可能需要使用鼠标进行滑动或点击操作才能加载数据,这样需要借助selenium来模拟人为操作。
这里主要以理想化的、简单的情况作为示例:

import scrapy
import demjson
from newsdata.items import NewsItem
import time


class ChinanewsSpider(scrapy.Spider):
   name = 'chinanews'
   allowed_domains = ['这里填写允许访问的域名','包括所有请求的域名','如果某域名不填写可能会导致爬虫失效']

   # 请求开始,这里主要是控制爬虫循环部分,根据页码进行访问
   def start_requests(self):
       for page in range(开始, 结束+1):
           yield scrapy.Request(url='http://channel.chinanews.com/某某资源?pager={}&pagenum=100&其他参数={}'.format(page,参数)), callback=self.parse)

   # 回调函数,对应上面的callback
   def parse(self, response):
   	# 根据响应中对应的数据格式进行抽取,必要时使用demjson进行str2json格式转换
       newsList = demjson.decode(response.text)
       
       for news in newsList:
           item =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值