爬虫文件
细节问题参考前两章。
在settings.py中设置图片和数据库

BOT_NAME = 'houses'
SPIDER_MODULES = ['houses.spiders']
NEWSPIDER_MODULE = 'houses.spiders'ROBOTSTXT_OBEY = False
LOG_LEVEL="WARNING"  #日志为警告以上才显示
DOWNLOAD_DELAY = 3ITEM_PIPELINES = {'houses.pipelines.MysqlPipeline': 100,'houses.pipelines.HouseImagePipeline': 200, # 图片下载模型
}
IMAGES_STORE='images'   #图片路径【注意】
IMAGES_EXPIRES=90
IMAGES_MIN_HEIGHT=100
IMAGES_MIN_WIDTH=100MYSQL_DB_HOST="127.0.0.1"
MYSQL_DB_PORT=3306  #端口
MYSQL_DB_NAME="spier"
MYSQL_DB_USER="root"
MYSQL_DB_PASSWORD="123456"

打开cmd,添加表【数据库】

cmd
C:\Users\admin>mysql -u root -p
mysql> show databases;
mysql> use spier;
mysql> create table HouseInfo(house varchar(255),address varchar(255),price varchar(255),total varchar(255))ENGINE=InnoDB DEFAULT CHARSET=utf8;  //建表

pipelines.py

from scrapy.http import Request
from scrapy.exceptions import DropItem
from scrapy.pipelines.images import ImagesPipeline
import pymysql
class MysqlPipeline:def open_spider(self,spider):# 读取settings.py中的配置项host = spider.settings.get("MYSQL_DB_HOST")port = spider.settings.get("MYSQL_DB_PORT")dbname = spider.settings.get("MYSQL_DB_NAME")user = spider.settings.get("MYSQL_DB_USER")pwd = spider.settings.get("MYSQL_DB_PASSWORD")# 创建数据库链接self.db_conn = pymysql.connect(host=host, port=port, db=dbname, user=user, password=pwd)# 打开游标self.db_cur = self.db_conn.cursor()def process_item(self, item, spider):values = (item["house"],item["address"],item["price"],item["total"])  # 与占位符%s对应的数据# sql语句,数据部分使用占位符%s代替sql = "insert into HouseInfo(house,address,price,total) values(%s,%s,%s,%s)"self.db_cur.execute(sql, values)  # 执行SQL语句return itemdef close_spider(self, spider):self.db_conn.commit()  # 提交事务self.db_cur.close()  # 关闭游标self.db_conn.close()  # 关闭数据库连接
class HouseImagePipeline(ImagesPipeline):def get_media_requests(self, item, info): #请求下载指定item对象数据# for image_url in item["image_urls"]:#     yield Request(image_url)yield Request(item["image_urls"])def item_completed(self, results, item, info):#对下载结果进行处理# results - 下载好的资源参数([(True, {'url': 'https://img.mukewang.com/5861d2500001d39406000338-240-135.jpg',#                             'path': 'full/6922b98c7acde37f0b570650844e2e660b82991a.jpg',#                             'checksum': '037f4f643599f3e7870225798ece845b', 'status': 'downloaded'})])# item - 被爬取的item对象image_path=[x['path'] for ok,x in results if ok]# print(image_path)if not image_path:raise DropItem("items contains no images")item["image_path"]=image_path[0]return item

items.py

import scrapy
class HousesItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()house = scrapy.Field()  # 楼盘名称address = scrapy.Field()  # 地址price = scrapy.Field()  # 均价total = scrapy.Field()  # 总价image_urls = scrapy.Field()  #图片url地址image_path=scrapy.Field  #图片的本地路径

beike.py

import scrapy
from houses.items import HousesItemclass ShellnewsSpider(scrapy.Spider):name = 'beike'allowed_domains = ['cq.fang.ke.com']start_urls = ['http://cq.fang.ke.com/loupan/pg{}'.format(i) for i in range(7, 8)]def parse(self, response):allli=response.xpath("//ul[@class='resblock-list-wrapper']/li")for row in allli:# 使用索引进行快速定位item = HousesItem()  # 初始化容器必须放在循环内item["house"] = row.xpath("div/div[1]/a/text()").get().strip()  # 楼盘item["address"] = row.xpath("div/a[1]/@title").get().strip()  # 地址item["price"] = row.xpath(".//span[@class='number']/text()").get()  # 均价total = row.xpath(".//div[@class='second']/text()").get()  # 总价# 简单清洗数据,去掉总价2个字total = total.replace("总价", "") if total is not None else ""item["total"] = totalitem["image_urls"] = row.xpath("a/img/@data-original").get()  # 图片的地址yield item

main.py

from scrapy import cmdline
cmdline.execute("scrapy crawl beike".split())

运行
1、可以直接运行main.py【main.py 可以用于调试】
2、在终端控制台,输入命令:

scrapy crawl beike -o 【要保存在某文件中】
scrapy crawl beike -o beike.csv

运行结果:

数据采集之贝壳新房【完整代码(数据库+图片)】相关推荐

  1. 原生JS:100行js代码带你实现【像素鸟】小游戏(完整代码+素材图片)

    系列文章目录 JS:经典小游戏:像素鸟 JS:经典小游戏:贪吃蛇 JS:经典小游戏:扫雷 目录 系列文章目录 像素鸟 1.游戏介绍 2.代码分析 3.代码实现 3.1 随机生成水管 3.2 当水管超过 ...

  2. 基于Pubmed数据库的蛋白质修饰后的信息挖掘.完整代码+数据 毕业设计

    完整代码: https://download.csdn.net/download/weixin_55771290/87944120 摘 要 如今Pubmed文献检索系统上发表的医学文献的数量十分庞大, ...

  3. 【图像分类案例】(2) DenseNet 天气图片四分类(权重迁移学习),附Tensorflow完整代码

    各位同学好,今天和大家分享一下使用 Tensorflow 构建 DenseNet 卷积神经网络模型,并使用预训练模型的权重,完成对四种天气图片的分类. 完整代码在我的 Gitee 中,有需要的自取: ...

  4. 【深度学习】(5) 简单网络,案例:服装图片分类,附python完整代码

    1. 数据获取 使用系统内部的服装数据集构建神经网络.首先导入需要的库文件,x和y中保存训练集的图像和目标.x_test和y_test中保存测试集需要的图像和目标.(x, y)及(x_test, y_ ...

  5. 最完整代码的用php备份mysql数据库

    最完整代码的用php备份mysql数据库 1. mydb.php //DB类 2. backup.php //备份脚本 3. restore.php //还原脚本 mydb.php <? cla ...

  6. html如何设置图片循环旋转动画效果,如何使用css3实现图片自动旋转的特效(完整代码)...

    在介绍如何使用css3实现旋转图片特效的基础上,重点介绍了具体的步骤.这篇论文内容紧凑,希望大家能有所收获. 在浏览网页的过程中,你会遇到一种特殊的效果,叫做图片旋转:不同的图片会根据时间的变化在同一 ...

  7. 用纯ASP代码实现图片上传并存入数据库中

      用纯ASP代码实现图片上传并存入数据库中    热     ★ 用纯ASP代码实现图片上传并存入数据库中 用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服务器恐 ...

  8. JavaWeb实现裁剪图片上传完整代码

    JavaWeb实现裁剪图片上传完整代码 这篇文章主要为大家详细介绍了javaWeb实现裁剪图片上传完整代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了JavaWeb实现裁剪 ...

  9. python 识别登陆验证码图片(完整代码)

    在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...

最新文章

  1. win10蓝屏问题,关于驱动kisSaasUrlRedirectKnl64.sys 的
  2. pc 页面在移动端怎么获取放大倍数、_百度移动搜索开放适配服务的3种方法
  3. Mining Precision Interface From Query Logs -- 学习笔记(三)
  4. 找DB2存储过程的package
  5. SAP Spartacus全局配置里和路由Route相关的配置
  6. 【炼数成金 NOSQL引航 三】 Redis使用场景与案例分析
  7. 一个CXF集成SPRING的WEBSERVICE完整实例
  8. js技术要点---document.write()方法在IE浏览器和火狐浏览器下面的兼容性问题
  9. 详解Python中genfromtxt的用法(numpy)
  10. 为什么选择 Visual Studio Code
  11. li的鼠标移入移出事件和点击事件分别实现为当前li添加样式,删除其他li样式...
  12. CentOS 6.5编译安装MySQL5.7.7rc
  13. pc端js在线预览Word、Excel
  14. 五子棋等级考试软件的开发(五)
  15. 使用 macOS 为安卓刷机
  16. 2022届美团和腾讯校招薪资出来了,被倒挂了。。。
  17. 分析攻击IP来源地并画出饼图 1
  18. Proximity indication
  19. (Java)全限定类名和非限定类名的区别
  20. MVC中的自定义过滤器

热门文章

  1. layui文件上传等待动画
  2. 域名解析错误怎么办?
  3. 浏览器打不开网页服务器错误代码,浏览器打不开任何网页提示域名解析错误错误代码105怎么办?...
  4. win7不能在本地计算机启动防火墙,Win7防火墙启动不了的原因及解决办法
  5. 你说你很爱这首诗,我说我也有首很爱的诗
  6. 2022年版中国碳化硅(SiC)市场深度调研与投资可行性分析报告
  7. nvidia xavier平台无PD控制器USB接口调试
  8. 服务器负载过高的处理方式
  9. 2508.笨拙的手指(进制转化+巧用异或运算)
  10. Vue生命周期,mounted,destory,beforedestory,updated,