第2章数据获取_第1页
第2章数据获取_第2页
第2章数据获取_第3页
第2章数据获取_第4页
第2章数据获取_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《大数据技术与应用基础》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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论