《《数据采集与预处理》教学教案—05使用Scrapy爬取北京公交信息.docx》由会员分享,可在线阅读,更多相关《《数据采集与预处理》教学教案—05使用Scrapy爬取北京公交信息.docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络爬虫实践NO. 5教师姓名授课班级授课形式理实一体化授课时间年 月 日第周授课时数4授课章节名称任务3 使用Scrapy爬取北京公交信息教学目的学会使用Scrapy爬耳又北京公交信息。教材分析教学重点使用Scrapy爬取北京公交信息教学难点使用Scrapy爬取北京公交信息更新、 补充、删节内容课外作业积极动手实践, 熟练完成相关任务的实施操作教学过程教学提示任务三、使用Scrapy爬取北京公交信息1.任务描述(1)借助学习论坛、网络视频等网络资源和各种图书资源,学习网络爬虫 相关技术,熟悉Scrapy的使用。(2)使用Scrapy实现淘宝网站信息的获取。2、任务目标学会使用Scrapy爬取
2、北京公交信息。3、知识准备了解 Scrapy:Scrapy 是一个为了爬取网站数据、提取结构性数据而编写的应用框架,可 以应用在包括实现数据挖掘功能、信息处理功能或存储历史数据功能等的一系 列处理程序中。(2)Scrapy的操作流程:1 . 选择一个网站2 .创建一个Scrapy项目3 .创建一个spider4 .定义Item5 .编写 spider创建一个spider, 必须继承scrapy.Spider类,且定义以下3个属性:(1) name:用于区分spidero该名称必须是唯一的,不可以为不同的spider 设定相同的名称。(2) start_urls :包含了 spider在启动时进
3、行爬取的URL列表。因此,第 一个被获取到的页面将是其中之一。后续的 URL则从初始的 URL获隼到的 数据中提隼。(3) parse(): spider的一个方法。被调用时,每个初始URL完成下载后生 成的 Response对象将会作为唯一的参数传递给该函数。该方法负责解析返回的 数据,提取数据(生成Item)以及生成需要进一步处理的 URL的Request对 象。(6) 取 Item(使用机制:Scrapy Selectors)(1)常用的 Xpath表达式以及对应的含义:/html/head/title:选择HTML文档中head标签内的title元素。/html/head/title/
4、text():选择前面提到的title元素的文字。td:选择所有的td元素。/divclass=nminen:选择所有具有 class=mine属性的 div 元素。(2)selector有以下4个基本的方法:xpath():传入 Xpath表达式,返回该表达式所对应的所有节点的selector 列表。css():传入CSS表达式,返回该表达式所对应的所有节点的selector列表。extract():序列化该节点为 Unicode字符串并返回listore():根据传入的正则表达式对数据进行提取,返回Unicode字符串的list7 .存储爬取的数据(使用Feed exports)8 .执行
5、项目4、任务实施(1) 在命令行窗口中 新建一个名为beibus的Scrapy项 目!:Usersmacscrapy startproject beibusew Scrapy project beibus, using ten?)late directory * c:usersmacappdatalocalprograinspythonpython36lib ite-packagesscrapytenplatesproject,, created in:C:Usersmacbeibusou can start your first spider with:cd beibusscrapy gen
6、spider exainple example, com(2)切换到beibus目录,并使用genspider创建一个spiderC:Usersmaccd beibus:Usersmacbeibusscrapy genspider bei_bus beijing. 8684. cnCreated spider bei_bus using teirplate basic in module:beibus. spiders. bei bus(3)使用PyCharm打开beibus项目y beibus C:Usersmacbeibus7 beibus d spidersI & Jnit_.pybei
7、bus.py那nit_.py items.py .middlewares.py i pipelines.py / settings.pyT2 scrapy.cfg Hill External Libraries(4)进入 settings,将 ROBOTSTXT_OBEY 的参数改为 False(5)将DEFAUET_REQUEST_HEADERS方法的注释去掉,并在其中添加 User-Agent 属性。(6)进入bei_bus.py文件,对start_urls进行修改。(7)新建一个start_requests()方法(此方法名固定),获得并构建一级网页URL。(8)在parse_index
8、()方法中,使用Xpath寻找详细信息页面的URL,并 对网址进行拼接,之后对二级网页发起请求,并返回回调函数parse_detail()。(9)在parse_detail()方法中对详细信息页面进行操作。(10)对 wang_list_tag字段和fanist_tag字段进行格式化。(11)进入items.py文件,修改其中的class以格式化数据。(12)在bei_bus.py文件的parse_detail()方法的末尾添加如下语句,以格式 化数据。bus item 二 BeibusItemOfor field in bus item, fields:bus_itemfield = eva
9、l(field)yield bus_item(13)在MySQL的studb数据库中创建一个stu businfo表hysql CREATE TABLE stu_businfo( bus_name varchar(1000),- bus_type varchar(1000), bus_time varchar(1000),- ticket varchar(1000), gongsi varchar(1000),- gengxin varchar(1000), licheng varchar(1000),- wang_info varchar(1000), wang_buff varchar(1
10、000),- fan_info varchar(1000), fan_buff varchar(1000)- DEFAULT CHARSET=utf-8;(14)在settings.py文件末尾添加如下参数。DB_H0ST = local hostDB_USER =stuDB_PWD = stu123DB_CHARSET=UTF8(15)修改pipelines.py文件import pymysqIfrom beibus import settingsclass MysqI Pi peli ne (object):def _i n i t_(seIf):self.host = settings.
11、 DB_H0STself.user = settings. DB_USERself.pwd = settings. DB_PWDself.db = settings. DBseIf.charset = sett i ng.DB. CHARSETself, connect ()def connect (self):seIf.conn = pymysqI. connect (host=seIf. host,user=self, user, password=self, pwd, db二self, db,charset=seIf. charset)seIf.cursor = self.conn.cu
12、rsor 0(16)添加一个close_spider()方法,用于关闭MySQL数据库。(17)实现process_item()方法。(18)在settings.py中将ITEM_PIPELINES方法的注释去掉,并将其中的内容改为 “beibus.pipelines.MysqlPipeline:300。ITEM_PIPELINES =(beibus. pipelines. MysqlPipeline,: 300启动爬虫项目:在PyCharm 软件左下角单击“Terminal”标签,进入命令行界面,在其中 执行 “scrapy crawl bei_bus”命令。B brijinbut (C:U
13、-J.pyHb.;jinbu” bijir、 file dit Yew Navigate ode BeWctor Run Joels kxljlnbutbeijinbusspidersbeibus.pybustpidtb9i_tut.py (kxijinbut) PyC,rmOVCJ Window Help二31TR| HProject.Q + | * I9*A b.bu.py Bi beijinbus ,beyinbus y d tpideriA _ic*_py-b*-bw py _ini_.py 鼻 items.py middlewares.py 峰 pipelinei.py 渴 sett
14、ings.py* tcrapy.cfg lllllUbrn394041424344464748try:wang_info - response. xpath(* / id*bus_l ine* /di v 4 /di v/strong/text O), extract.f irst 0 except:wang_inf o = Nonetry:wang.list.tag = response. xpathf / id-*bus-line* /div5 /div/div/a/text () * ). extract 0 except:wang-list_tag = Nonetry:fan_info
15、 response. xpath(* / id*bus_line* /di v 6 /di v/strong/text 0 * ). extract.f irst () except:faruinfo - Nonetry:fan_list_tag = response. xpath(* /id=rbus.line* /div7 /div/div/a/text 0 ). extract 0BeibusSpider parse_detailOTerminalI kA. z + XMici-osoft Windows 板本 10. 0 1:134. 228scrapy crawl bei-burf力 fi: TODO b Python Console 5 Twninl No occurrences found. Ewt U7 chars 59:27 LFZ UIF 8