scrapy是什么

Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。

官网地址:https://scrapy.org/

官方文档:https://docs.scrapy.org/en/latest/

Github:https://github.com/scrapy/scrapy

准备工作

本项目环境:python3.7.0,mysql8.0.18

windows系统中安装python环境:Windows平台安装Python环境

windows系统中安装mysql数据库:Windows平台安装MySQL数据库

使用pip安装pymysql和scrapy包:

pip install pymysql
pip install scrapy

首先在mysql数据库中创建house_area表来存放市区,然后我们根据每个区来获取对应的数据,创建house_area表的sqlscript如下:

CREATE TABLE `house_area` (`id` int UNSIGNED AUTO_INCREMENT,`code` varchar(255) DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`parent_id` int not null DEFAULT 0,`parent_code` varchar(255) DEFAULT NULL,`display_order` INT NOT NULL DEFAULT 0,`created_on` timestamp DEFAULT current_timestamp,`updated_on` timestamp DEFAULT current_timestamp on update current_timestamp,PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

项目实战

根据官方文档使用scrapy指令快速创建获取市区的scrapy项目:

scrapy startproject hourse_area

创建项目后,目录结构如下:

定义市区的item,如上图所示,我们直接在items.py文件中定义:

class HourseAreaItem(scrapy.Item):code = scrapy.Field()name = scrapy.Field()parent_code = scrapy.Field()display_order = scrapy.Field()

开发获取市区的爬虫spider,在spiders目录中创建areaspider.py爬虫文件,主要获取重庆市的一二级区:

import scrapy
import re
from hourse_area.items import HourseAreaItemclass AreaSpider(scrapy.Spider):name = 'area'allow_domains = ["anjuke.com"]start_urls = ['https://chongqing.anjuke.com/sale/',]def parse(self, response):area_lists = response.css('div.div-border.items-list div.items:first-child .elems-l a')area_item = HourseAreaItem()display_order = 1for item in area_lists:href = item.css('::attr(href)').extract_first().strip()area_item['code'] = href.replace('https://chongqing.anjuke.com/sale/','').replace('/','')area_item['name'] = item.css('::text').extract_first().strip()area_item['parent_code'] = ''area_item['display_order'] = display_orderdisplay_order += 1yield area_itemyield scrapy.Request(href, callback=self.parse_subarea, meta={'parent_code': area_item['code']})def parse_subarea(self, response):subarea_lists = response.css('div.div-border.items-list div.items:first-child .elems-l .sub-items a')area_item = HourseAreaItem()display_order = 1for item in subarea_lists:href = item.css('::attr(href)').extract_first().strip()area_item['code'] = href.replace('https://chongqing.anjuke.com/sale/','').replace('/','')area_item['name'] = item.css('::text').extract_first().strip()area_item['parent_code'] = response.meta['parent_code']area_item['display_order'] = display_orderdisplay_order += 1yield area_item

开发item pipeline保存爬取的重庆市一二级区的数据到mysql数据库中,打开pipelines.py文件开发存储逻辑:

import pymysqlclass HourseAreaPipeline(object):def __init__(self):self.db = pymysql.connect("localhost", "root", "123456", "house", charset="utf8")self.cursor = self.db.cursor()def __del__(self):self.db.close()def process_item(self, item, spider):select_sql = "select id from house_area where code='%s'" % item['code']already_save = self.cursor.execute(select_sql)self.db.commit()if already_save == 1:# 更新update_sql = "update house_area set name='%s' where code='%s'" % (item['name'], item['code'])self.cursor.execute(update_sql)self.db.commit()else:parent_id = 0# 查询父级区域if item['parent_code']:select_sql = "select id from house_area where code='%s'" % item['parent_code']already_save = self.cursor.execute(select_sql)house_area = self.cursor.fetchone()self.db.commit()if already_save == 1:parent_id = house_area[0]# 插入insert_sql = "insert into house_area(code,name,parent_id,parent_code,display_order)\values('%s','%s','%d','%s','%d')"\%(item['code'],item['name'],parent_id,item['parent_code'],item['display_order'])self.cursor.execute(insert_sql)self.db.commit()return item

设置项目的settings,打开settings.py文件设置如下两项,其他的保持默认即可:

# 前置代码
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
# 后置代码ITEM_PIPELINES = {'hourse_area.pipelines.HourseAreaPipeline': 300,
}# 后置代码

在项目的根目录下运行scrapy指令开始爬取数据:

scrapy crawl area

如此重庆市的一二级区的数据我们就获取并加工保存在mysql数据库中。下一篇文章介绍如何根据区获取对应的数据。

声明:本项目仅仅供学习使用,使用该项目从事的一切商业行为与博主无关,自行承担责任。

Scrapy爬取重庆安居客二手房并存入mysql数据库(上)相关推荐

  1. Scrapy爬取重庆安居客二手房并存入mysql数据库(下)

    上篇中我们获取了重庆的一二级区(Scrapy爬取重庆安居客二手房并存入mysql数据库(上)),这一篇我们根据二级区获取相应的二手房信息. 初始化数据库 创建二手房信息数据库表,house表存放二手房 ...

  2. python—简单数据抓取七(采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用,利用ip池访问网页并将scrapy爬取转移到items的数据存入到数据库)

    学习目标: Python学习二十七-简单数据抓取七 学习内容: 1.采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用 2.利用ip池访问网页并将scrapy爬取转移到it ...

  3. scrapy爬取京东商品评论并保存至Mysql数据库中

    scrapy爬取京东商品评论并保存至Mysql数据库 一.总体概述 二.实践过程 2.1网页解析 2.2使用单线程爬取代码如下: 2.3使用scrapy爬取数据 2.4绘制词云图结果: 三.总结 一. ...

  4. Scrapy爬取当当网的商品信息存到MySQL数据库

    Scrapy爬取当当网的商品信息存到MySQL数据库 Scrapy 是一款十分强大的爬虫框架,能够快速简单地爬取网页,存到你想要的位置.经过两天的摸索,终于搞定了一个小任务,将当当网的商品信息爬下来存 ...

  5. python爬虫:爬取动态网页并将信息存入MySQL数据库

    目标网站 http://www.neeq.com.cn/disclosure/supervise.html 爬取网页该部分内容 网页分析 查看网页源代码发现没有表格部分内容,对网页请求进行分析 F12 ...

  6. 利用Scrapy爬取伯乐在线文章并存取到mysql数据库

    1.观察网址直接从(http://blog.jobbole.com/all-posts/)入手爬取伯乐在线所有文章,常规cmd创建项目 2.spider中采取xpath和css选择器提取语法,提取出想 ...

  7. mysql好评中评统计_scrapy爬取京东笔记本及评论信息存入MySQL数据库

    爬取思路 1.分析页面,定义爬取字段 2.观察网页,分析接口url,通过xpath和json解析爬取内容字段 3.在pipelines.py写入存储方式 4.开始爬取 5.GitHub地址:https ...

  8. python-爬虫,实现输入关键字,然后爬取关键字主页代码并存储到mysql数据库

    python-爬虫,实现输入关键字,然后爬取关键字主页代码并存储到mysql数据库 实现代码如下: 代码是可以实现的,有问题可以私聊我 import os import sys import base ...

  9. python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库

    python + selenium +chrome爬取qq空间好友说说并存入mongodb数据库 准备阶段 在正式开始在前需要先准备好做爬虫的工具,本例使用chrome无头浏览器进行爬取工作,也可使用 ...

最新文章

  1. 禁用微信 webview 调整字体大小
  2. 数据库事务隔离技术之 Next-Key Locks
  3. STM32F4 HAL库开发 -- 软件包
  4. 浅谈对JavaScript闭包的理解
  5. SQL语句拼接常加 where 1=1 的原因
  6. 虚拟机ping不通百度等外部网络
  7. Code First02---CodeFirst配置实体与数据库映射的两种方式
  8. 深度学习-计算机视觉--图像增广
  9. android 页面无法点击,为什么点击不跳转到下一界面,哪位大神帮瞅瞅
  10. 使用nginx+lua脚本读写redis缓存
  11. 常用算法(冒泡、插入、选择、快速)和二叉树详解
  12. JS难点之hoist
  13. python零基础能学吗-python零基础能学吗
  14. 管能做暖气管道吗_地暖这么好,为什么大家都选暖气片?原因在于它的“隐性”成本...
  15. [转载] Numpy数组对象ndarray
  16. thinkphp5json对象转数组
  17. 测试5g网速的软件排行榜,2021网络测速app排行榜-手机网速测试软件推荐
  18. deep_sort文章阅读(一)yolo的训练:PART1: 安装opencv(为了make时opencv=1)
  19. 基于JAVA南京传媒学院门户网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  20. 负载均衡的计算方法和含义

热门文章

  1. Flow 3D学习记录
  2. Java 提取 PPT 中 SmartArt 图形的文本内容
  3. stegsolve使用参考
  4. js 鼠标移入移出事件
  5. 33篇大数据治理文章打包送,技术+案例一应俱全!大数据
  6. DB2 数据库错误码释义
  7. Whistle安装教程(ios和安卓)全平台最详细
  8. 美团热修复Robust源码庖丁解牛(第一篇字节码插桩)
  9. 父亲节,家有老人是个宝
  10. 启用计算机图标,windows如何启用管理员及桌面图标设置?