整个专栏的文章,主要是围绕Python 后端Web开发 ,从第三方网页中爬取数据,并保存到后台MySQL 数据库中,然后提供Api接口供Android 客户端调取,并且对其中传输的数据采取AES 加密方式传输。
第一篇:主要讲解Python 后端爬虫Scrapy 框架的使用,用来爬取第三方网页并将数据存储到自己的数据库中。
熟悉的Python 同学,应该都熟悉PyCharm 这款IDE 吧,搭建Python 简单环境之类的就不在这里说了。
这里是该项目下载资源链接的地址:
一 :Python 安装Scrapy 模块 : 有以下几种方法
在PyCharm 的Terminal 终端环境下: 输入命令: pip install scrapy
若还不熟悉pip 命令操作的可以自行百度,其实就是Python 的一个安装模块包工具,可以很方便的快速安装python 的一些流行的框架,类似于Node.js 中 npm
去PyCharm 的 Settings 中Project Interpreter ,然后点击右边的"+",然后去搜索scrapy 即可
去 这个网站,去搜索下载模块,然后倒入到你的python 虚拟环境中,也可以
二:安装好Scrapy 模块后,就可以开始去写代码
1.首先去找一个好爬的网站(好爬指的是那些不需要一些登录验证的操作,因为这可能直接导致你在爬取过程中直接失败, 不过好像可以通过cookie 绕过去,有兴趣的读者可以自行研究)
我这里找的网站是"本地宝":
红色的标记主要是:爬取的Item 上面的一些字段,主要是标题,时间,地点,票价,图片的Logo的Url,以及跳转页的Url等
橙色的标记主要是:为了不断循环去爬取所有的页面的链接地址
2.确定要爬取的主页,以及爬取的具体Item的内容后,就可以开始敲代码了
首先:在终端Terminal 敲下命令: scrapy startproject bendibao ,输入之后,刷新一下,可以看到下面这样的目录结构!
3.现在开始写Python 代码:
首先在items.py中编写一个item 类:确定一些字段
import scrapy
class BendibaoItem(scrapy.Item):
cname = scrapy.Field()
ctime = scrapy.Field()
address = scrapy.Field()
price = scrapy.Field()
photo = scrapy.Field()
urlLink = scrapy.Field()
pass
然后确定后台数据库的连接方式,有MySQL 数据库也有自带的SQLite 数据库,也可以选择基于键值对的MongoDB 数据库
1,可以采用MySQL 方式:
新建一个MySQLPipeline.py 文件在里面写:
import pymysql.cursors
class MySQLPipeline(object):
def __init__(self):
#连接数据库
self.connect = pymysql.connect(
host = '127.0.0.1',
port = 3306,
db = 'bendibao',
user = 'root',
passwd = 'root',
charset = 'utf8',
use_unicode = True
)
self.cursor = self.connect.cursor()
def process_item(self,item,spider):
self.cursor.execute(
# 纯属python操作mysql知识,不熟悉请恶补
"""insert into app_activity(cname, ctime, address,price ,photo , urlLink)
value (%s, %s, %s, %s, %s , %s)""",
(item['cname'], item['ctime'],item['address'],item['price'],item['photo'],item['urlLink'],)
)
#提交sql语句
self.connect.commit()
#必须实现返回
return item
这样就新建了一个叫bendibao 的数据库,以及名为app_activity 的表
2.也可以用MongoDB 的方式建立后台数据库
import pymongo
class InputmongodbPipeline(object):
def __init__(self):
#连接mongo db 数据库
client = pymongo.MongoClient('127.0.0.1', 27017)
#新建一个数据库
db = client['ScrapyChina']
#新建一个表
self.post = db['mingyan']
def process_item(self, item, spider):
#将对象转换成一个字典
postItem = dict(item)
#然后将该字典json 数据插入表中
self.post.insert(postItem)
return item
可以在PyCharm 上安装一个Mongo 可视化插件 比如Mongo Plugin ,安装好之后,若存入Mongo 数据库成功后,就可以看到如下的结构,
确认好model 以及后台数据库之后,就可以开始写最重要的爬虫代码了:
1.在spiders 文件夹中新建一个BenDiBaoSpider.py 文件,而它原有自带的__init__.py 文件不需要去管它,因为它只是一个表示这是个文件夹而已,新建好之后,就开始写
# -*- coding: utf-8 -*-
import scrapy
from ..items import BendibaoItem
class BenDiBaoSpider(scrapy.Spider):
name = "BenDiBaoSpider"
allowed_domains = ["ly.sz.bendibao.com"]
start_urls = ['http://ly.sz.bendibao.com/tour/8972_2.html']
def parse(self, response):
play = response.css("div.section")
item = BendibaoItem()
for v in play:
item['cname'] = v.css('dt a::text').extract_first()
item['ctime'] = v.css('.icon_zise::text').extract()[0]
item['address'] = v.css('.icon_zise::text').extract()[1]
item['price'] = v.css('.icon_zise::text').extract()[2]
item['photo'] = v.css('a img::attr(src)').extract_first()
item['urlLink'] = v.css('dt a::attr(href)').extract_first()
# item['photo'] = v.css('a img::attr(src)').extract_first()
# item['urlLink'] = v.css('a:attr(href)').extract_first()
yield item # 把取到的数据提交给pipline处理
start_url = 'http://ly.sz.bendibao.com'
next_page = response.css('#ctl00_NextPage::attr(href)').extract_first() # css选择器提取下一页链接
print("next_page", next_page)
if next_page is not None: # 判断是否存在下一页
next_page = response.urljoin(next_page)
print("next_page 22", next_page)
yield scrapy.Request(next_page, callback=self.parse) # 提交给parse继续抓取下一页
主要分3块:
name 为Scrapy 框架等下开始爬的爬虫名, 还有域名,以及要爬的网址等css 选择器,熟悉前端的知道可以按F12 查看该网页的源代码,然后利用检查元素,可以定位到每个标签的位置,进而可以查看它的id,class,value等等,就可以写一些js 脚本进而修改整个html页面等,爬虫只需要筛选指定元素,并将其中的值保存到后台数据库即可爬虫的自动爬取,确认好爬虫的下一页需要爬取的网址后,就可以让它自动爬取下一页,然后每一页又按照之前的css 筛选,进而可以爬完整个你想要爬完的内容
写完这些爬虫代码后,最后还要注意一下settings.py 文件中的ITEM_PIPELINES 字段,需要配置与你数据库关联的那个类名:比如:
ITEM_PIPELINES = {
'bendibao.MySQLPipeline.MySQLPipeline' : 300,
}
完成这些步骤后,就可以启动整个爬虫了,只需输入一条命令:
scrapy crawl BenDiBaoSpider
这里的crawl 后面跟着的正好是之前写好的spider 的 name.
最后,安装一个Navicat 可视化数据库软件,以及phpStudy 软件(一个可以快速启动Apache 服务,MySQL 服务的软件 ,就不需要你自己手动输命令去启动了哈),可以看下成果!
大概有1000条记录,最后,我会把整个项目放到我的资源下载中,大家有兴趣的童鞋可以去下载看下,不过我觉得还是优先自己敲会比较好,学的也会比较多哦!!!
暂无评论内容