python网页数据抓取(一下爬虫爬虫项目的基本步骤和基本操作步骤(一))

优采云 发布时间: 2022-02-17 15:01

  python网页数据抓取(一下爬虫爬虫项目的基本步骤和基本操作步骤(一))

  Python爬虫--scrapy爬虫框架介绍写在前面

  在编写爬虫之前,我从未使用过爬虫框架。其实我之前写的就是一个爬虫写的小练习的demo。只能说是从网上抓取一点数据,直接用python脚本解决爬虫的所有功能。循环获取更多数据页。后来了解了代理池系统,稍微了解了一下,爬虫其实也算是一个项目。该项目分为模块。不同的模块负责不同的功能。有些模块负责封装http请求,有些模块负责处理请求。(数据采集),有些模块负责数据分析,有些模块负责数据存储。这样一个框架的原型已经出现,这可以帮助我们更加专注和高效地抓取数据。对于scrapy,一开始并不想过多解释scrapy框架各部分的组成和功能,而是直接在实际运行中感受一下框架是如何分工协作的,各个模块负责什么功能,最后关注一下这个框架。一些原则应该是学习scrapy框架的最好方法。

  scrapy爬虫的基本步骤创建一个scrapy爬虫项目。创建一个 Spider 爬虫类来爬取网页内容并解析它。定义数据模型(Item)并将捕获的数据封装到Item中。使用Item Pipeline来存储和抓取Items,即数据实体对象。一、创建一个scrapy爬虫项目

  安装scrapy后,运行命令scrapy startproject project name,创建scrapy爬虫项目。例如运行scrapy startproject test1会生成一个test1文件夹,目录结构如下:

  

  二、创建一个Spider爬虫类来爬取网页内容并解析它。

  爬虫的代码写在spider文件夹下,所以在spider目录下创建一个python文件,爬取方天下的数据,所以创建一个python文件,命名为ftx_spider.py。

  

  接下来,开始在 ftx_spider.py 中编写爬虫代码:

  import scrapy

class FtxSpider(scrapy.Spider):

"""

一、创建一个爬虫类,继承scrapy.Spider

二、通过name属性,给爬虫类定义一个名称

三、指定要抓取的网页链接urls,发送http请求

方式一:

1.继承scrapy.Spider的start_requests()方法。

2.指定要爬取的url,通过scrapy.Request(url=url, callback=self.parse)发送请求,callback指定解析函数。

方式二(简化):

1.直接通过start_urls常量指定要爬取的urls。

2.框架会自动发送http请求,这里框架默认html解析函数parse().

四、针对http请求的response结果,编写解析方法,parse()

"""

name = 'ftx'

# 方式一:通过scrapy.Request(url=url, callback=self.parse)发送请求,指定解析函数

# def start_requests(self):

# urls = ['http://wuhan.esf.fang.com/house-a013126/i3']

# for url in urls:

# yield scrapy.Request(url=url, callback=self.parse)

#

# def parse(self, response):

# # 这里对抓取到的html页面进行解析

# print(response.url)

# 方式二(简化版):通过start_urls,框架自动发送请求,默认解析函数为parse()

start_urls = ['http://wuhan.esf.fang.com/house-a013126/i3']

def parse(self, response):

print(response.url)

  三、数据模型Item,定义爬取数据的数据结构

  这个Item相当于java中的域实体,或者javabean。在 items.py 中定义了一个类,它继承了 scrapy.Item。这样我们就可以将我们抓取的数据封装到一个对象中。

  import scrapy

class FtxSpiderItem(scrapy.Item):

# define the fields for your item here like:

title = scrapy.Field() # 标题

huxing = scrapy.Field() # 户型

size = scrapy.Field() # 面积

floor = scrapy.Field() # 楼层

fangxiang = scrapy.Field() # 方向

year = scrapy.Field() # 建房时间

shop_community = scrapy.Field() # 小区

address = scrapy.Field() # 地址

total_price = scrapy.Field() # 总价(万)

price = scrapy.Field() # 单价(万/m2)

  四、使用Item Pipeline存储和抓取item并将数据存储在MongoDB中

  项目管道是项目管道。当 Item 生成后,会自动发送到 Item Pipeline 进行处理。

  首先在setting.py中添加MongoDB数据库连接信息

  # MongoDB

HOST = 'localhost'

PORT = 27017

DB_NAME = 'ftx'

COLL_NAME = 'roomprice'

  然后在pipelines.py中创建一个类,连接数据库,插入数据

  import pymongo

from scrapy.conf import settings

class FtxSpiderPipeline(object):

def __init__(self):

# 连接MongoDB

self.client = pymongo.MongoClient(host=settings['HOST'], port=settings['PORT'])

# 获取数据库

self.db = self.client[settings['DB_NAME']]

# 获取集合

self.collection = self.db[settings['COLL_NAME']]

def process_item(self, item, spider):

self.collection.insert(dict(item))

  最后在setting.py中指定Item Pipeline使用的类和优先级

  ITEM_PIPELINES = {

'ftx_spider.pipelines.FtxSpiderPipeline': 300

}

  运行命令行scrapy crawl 'crawler name name',可以发现数据已经成功存入数据库daacheng/PythonBasic

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线