版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《大数据技术与应用基础》21世纪高等院校“云计算和大数据”人才培养规划教材第2章数据获取人民邮电出版社能力CAPACITY要求熟悉网络爬虫。了解爬虫常用的方法,掌握爬虫环境的搭建。具有良好的职业道德。爬虫项目创建Scrapy环境搭建采集目标数据项定义爬虫核心实现数据存储爬虫运行一、Scrapy环境搭建所需环境: python2.7 lxml-3.5.0 pyOpenSSL-0.13.1 pywin32-219 setuptools-0.7 twisted-15.4.0 erface-4.1.3 Scrapy-1.0搭建时,应先搭建python和其他几个环境,最后安装Scrapy环境。Scrapy环境搭建爬虫项目创建采集目标数据项定义爬虫核心实现数据存储爬虫运行二、爬虫项目创建scrapystartprojectSinanewsSpider在windows命令行操作模式下:其中,SinanewsSpider为所创建的爬虫项目的名称。此时在相应的目录下出现SinanewsSpider爬虫项目。二、爬虫项目创建我们建立一个自己的爬虫,文件名为SinanewsSpider.py,爬虫代码则主要是在所建的爬虫文件中在项目路径下:在SinanewsSpider→SinanewsSpider路径下,文件items.py、pipelines.py以及settings.py也是后续需要使用的到的文件。Scrapy环境搭建采集目标数据项定义爬虫项目创建爬虫核心实现数据存储爬虫运行三、采集目标数据项定义1、根据需要定义数据项(标题,内容,时间,图片链接地址,网页链接地址,发表时间)爬虫实例的实现过程:(以采集新浪本地新闻为例)2、将数据存储到数据库在MySQL数据库中建立数据表三、采集目标数据项定义3、根据以上数据编写代码:爬虫实例的实现过程:(以采集新浪本地新闻为例)importscrappyclassSinanewsspiderItem(scrapy.Item):#定义数据项类,从crapy.Item 继承
#definethefieldsforyouritemherelike:title=scrapy.Field()#定义标题项
content=scrapy.Field()#定义内容项
pubtime=scrapy.Field()#定义发表时间
imageUrl=scrapy.Field()#定义图片链接地址
Url=scrapy.Field()#定义页面链接地址定义好之后,就可以在写爬虫代码时,来定义属于这个数item类型的item对象了。Scrapy环境搭建爬虫核心实现采集目标数据项定义爬虫项目创建数据存储爬虫运行四、爬虫核心实现#-*-coding:utf-8-*-
1fromscrapy.spidersimportSpider
2fromscrapy.selectorimportSelector
3fromscrapyimportsignals
4fromscrapy.crawlerimportCrawlerRunner
5fromjectimportget_project_settings
6fromscrapy.utils.logimportconfigure_logging
7fromscrapy.xlib.pydispatchimportdispatcher
8fromernetimportreactor
9fromtimeimportctime,sleep
10fromscrapy.spidersimportSpider
11
fromscrapy.selectorimportSelector
12fromscrapyimportsignals
13fromscrapy.crawlerimportCrawlerRunner
14fromjectimportget_project_settings
15fromscrapy.xlib.pydispatchimportdispatcher
16fromernetimportreactor
17fromitemsimportSinanewsspiderItem
18fromscrapy.httpimportRequest
19importlogging
20importMySQLdb
21importscrapy
22fromscrapy.utils.responseimportget_base_url
22fromscrapy.utils.urlimporturljoin_rfc
#以上是一些依赖包的导入
23classWikiSpider(scrapy.Spider):
/24
name="SinanewsSpider"
25
start_urls=[]
26
def__init__(self):
Scrapy框架已经帮我们定义好了基础爬虫,只需要从scrapy.spider继承,并重写相应的解析函数即可。27self.start_urls=["/news/gnxw/gdxw1/index.shtml"]
28defparse(self,response):
29forurlinresponse.xpath('//ul/li/a/@href').extract():
30yieldscrapy.Request(url,callback=self.parse_detail)
31nextLink=[]
32nextLink=response.xpath('//div[@class="pagebox"]///span[last()-1]/a/@href').extract()
33ifnextLink:
34nextLink=nextLink[0]
35nextpage=nextLink.split('./')[1]
36yieldRequest(/news/gnxw/gdxw1//+nextpage,callback=self.parse)
37defparse_detail(self,response):
38item=SinanewsspiderItem()
39item['title']=response.xpath('//h1[@id="artibodyTitle"]/text()')//.extract()[0].encode('utf-8')
40content=''
41forconinresponse.xpath('//div[@id="artibody"]/p/text()').extract():
42content=content+con
43item['content']=content.encode('utf-8')
44item['pubtime']=response.xpath('//span[@id="navtimeSource"]/text()')//.extract()[0].encode('utf-8')
45imageurl=''
46forimginresponse.xpath('//div[@id="artibody"]///div[@class="img_wrapper"]/img/@src').extract():
47imageurl=imageurl+img+'|'
48item['imageUrl']=imageurl.encode('utf-8')
49item['Url']=response.url.encode('utf-8')
50yielditem四、爬虫核心实现分段了解代码第1~22行为引入一些相关的依赖包;第23行定义一个爬虫类,继承自scrapy.spider类;第26~27行代码为构造函数;在第27行中,对start_urls进行了初始化赋值操作,将即将需要爬取的新闻列表页地址赋值给start_urls。代码第28~36行定义了parse方法;第37~50行详细说明上文中提到的parse_detail;最后第50行代码yielditem会将保存了值的item自动推送到pipelines管道中,在pipelines管道中,我们可以对数据进行处理或者进行存储操作。Scrapy环境搭建数据存储采集目标数据项定义爬虫核心实现爬虫项目创建爬虫运行五、数据存储在这一节中,我们对pipelines进行介绍。我们希望将数据存储到2.2节所定义的数据库表中,其主要需要在pipelines.py文件中进行代码的实现,如下所示:1importMySQLdb
2classSinanewsspiderPipeline(object):
3con=MySQLdb.connect(host='localhost',port=3306,user='root',//passwd='123456',db='sinanews',charset='utf8')
4cur=con.cursor()
5defprocess_item(self,item,spider):
6query="INSERTINTOSinaLocalNews(title,content,imageUrl,Url,pubtime)//VALUES('%s','%s','%s','%s',//trim(replace(replace(replace(left('%s',16),'年','-'),'月','-'),'日','')))"//%(item['title'],item['content'],item['imageUrl'],item['Url'],item['pubtime'])
7self.cur.execute(query)
8mit()五、数据存储分段了解代码第1行中,导入MySQL相应的包。第2行代码定义当前pipeline的类名。第3行用MySQLdb.connect建立一个数据库连接。第4行代码则获取数据库链接的游标。第6行,定义一条数据库插入语句的字符串,其中%s表示接收参数值。第7,8行,做一个字符串的处理操作,因为数据库表中定义的是日期时间型,不支持数据项提取的原始数据。写好pipeline管道后,我们还需要将当前这个pipeline激活使用。此时,我们需要到爬虫项目的settings.py文件中进行激活。五、数据存储settings中主要代码如下所示:1BOT_NAME='SinanewsSpider'
2SPIDER_MODULES=['SinanewsSpider.spiders']
3NEWSPIDER_MODULE='SinanewsSpider.spiders'
4ITEM_PIPELINES={
'SinanewsSpider.pipelines.SinanewsspiderPipeline':300,
}以上代码中第四行括号内的参数一定要替换成在pipeline中的自己定义的pipeline类名,才能够进行激活并使用。至此,我们已经利用Scrapy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年浙江省部编版小学英语三年级上册第8单元听力练习题
- 运输二队员工不安全行汇编
- 全球气候变暖背景下黄大豆单产波动与投资风险重估
- 从流体动力学仿真看PB弯头适配器对超纯水系统良率的隐性影响
- 人工智能交互界面嵌入对桌面多用途座产品定义权的争夺
- ESG评级体系嵌入电镀拉手项目投资决策的量化影响路径
- AP抗氧化剂专利悬崖期后的市场格局重塑与投资窗口
- 2026年湖南铁道职业技术学院高职单招笔试英语试题库含答案解析3套试卷
- 2026年湖南有色金属职业技术学院高职单招笔试化学试题库含答案解析2套试卷
- 2026年湖南体育职业学院高职单招笔试职业技能测验试题库含答案解析3套试卷
- 七年级语文开学第一课+课件
- 5.《铺满金色巴掌的水泥道》课件
- 《生物质材料简介》课件
- 《洁净厂房操作规程》课件
- 2024-2025学年北京西城区六年级(上)期末 语文试卷(含答案)
- 《三七总皂苷对ApoE-小鼠动脉粥样硬化炎症反应的影响及其机制研究》
- 电影与社会文化影响研究
- 屋顶光伏发电项目EPC总承包工程招标文件
- 渤海大学《大学物理》2018-2019期末试卷(C卷)
- 舞台用升降机械系统
- 房产测量作业指导书
评论
0/150
提交评论