IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Scrapy爬取北京公交并保存MYSQL数据库实例 -> 正文阅读

[大数据]Scrapy爬取北京公交并保存MYSQL数据库实例

????????前言就不过多赘述了,大家只要把scrapy的基本了解之后就可以完成这个项目。

一:创建scrapy项目:?打开控制台输入 scrapy startproject beibus(这个是项目名称,可以自己修改)

进入项目文件夹创建爬虫scrapy genspider (爬虫名) (域名)

?查看beibus项目,如果有刚刚创建的爬虫名称的py文件,说明爬虫创建成功

二:设置settings

打开settings.py文件,修改ROBOTSTXT_OBEY的值为False

?

并且将DEFAULT_REQUEST_HEADERS参数取消注释,在后方加上User-Agent参数,这个参数大家可以自行选择网站,笔者这边选择的是www.baidu.com的headers

?三:创建并编写start_requests方法

class BeiBusSpider(scrapy.Spider):
    name = 'bei_bus'
    allowed_domains = ['beijing.8684.cn']
    start_urls = 'http://beijing.8684.cn'
    def start_requests(self):
        for page in range(2):
            url='{url}/list{page}'.format(url=self.start_urls,page=(page+1))
            yield scrapy.FormRequest(url,callback=self.parse_index)
    def parse_index(self,response):
        pass
    def parse(self, response):
        pass

此方法名固定,启动scrapy首先启动该方法。

获取一级url之后使用callback将url回调到parse_index方法

四:创建并编写parse_index方法

    def parse_index(self,response):
        beijing=response.xpath('//div[@class="cc-content service-area"]/div[2]/a/@href').extract()
        for href in beijing:
            url2=urljoin(self.start_urls,href)
            yield scrapy.FormRequest(url2,self.parse_detail)

使用response.xpath获取需要的数据,笔者这边获取的是公交路线之后的二级url

?使用urljoin拼接url和刚刚爬取的href获取二级url之后callback回调到parse_detail方法

五:在parse_detail方法获取需要爬取的数据

笔者这边爬取的数据是公交路线名称,公交路线以及起点和终点

?

?

    def parse_detail(self,response):
        name=response.xpath('//h1[@class="title"]/text()').extract()
        trip=response.xpath('//div[@class="trip"]/text()').extract()
        luxian=response.xpath('//div[@class="bus-lzlist mb15"]/ol/li/a/text()').extract()

?name

trip

luxian

?

?至此,数据爬取完成。下面是scrapy爬取数据导入数据库的步骤。

一:进入 items.py 文件,修改其中的 class 以格式化数据

?二:在 bei_bus.py 文件的 parse_detail方法的末尾添加如下语句,以格式化数据

bus_item = BeibusItem()
for field in bus_item.fields:
bus_item[field] = eval(field)
yield bus_item

三:在 MySQL 的 bus?数据库中创建一个 businfo表

?四:在 settings.py 文件末尾添加如下参数

DB_HOST = 'localhost'
DB_USER = 'root'
DB_PWD = 'liu19780928'
DB_CHARSET='UTF8'
DB = 'bus'

(根据个人实际更改)

五:在 pipelines.py 文件中,修改 class 名称为 MySQL Pipeline,添加初始 化方法,将 host、user、password、db、charset 从 settings 中读取出来,并通 过添加一个 connect()方法建立与数据库的连接

class MysqlPipeline(object):
    def __init__(self):
        self.host = settings.DB_HOST
        self.user = settings.DB_USER
        self.pwd = settings.DB_PWD
        self.db = settings.DB
        self.charset = setting.DB_CHARSET
        self.connect()

    def connect(self):
        self.conn = pymysql.connect(host=self.host,
                                    user=self.user,
                                    password=self.pwd,
                                    db=self.db,
                                    charset=self.charset)
        self.cursor=self.conn.cursor()
    def process_item(self, item, spider):
        return item

六:添加一个 close_spider方法,用于关闭 MySQL 数据库连接

 def close_spider(self, spider):
        self.conn.close()
        self.cursor.close()

七:实现 process_item()方法,用于完成向数据库中插入数据的操作

    def process_item(self, item, spider):
        sql='insert into businfo values("%s","%s","%s")'%(item['name'],item['trip'],item['luxian'])
        self.cursor.execute(sql)
        self.conn.commit()
        return item

八:在 settings.py 中将 ITEM_PIPELINES 方法的注释去掉,并将其中的内容 改为“'beibus.pipelines.MysqlPipeline':300”,

ITEM_PIPELINES ={
'beibus.pipelines.MysqlPipeline': 300
}

九:执行 “scrapy crawl bei_bus”命令,启动爬虫项目

?最后查看一下mysql数据

select * from businfo;

Scrapy爬取北京公交完成!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-19 18:25:59  更:2021-12-19 18:26:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:34:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码