循序渐进Python3(十二)--0--爬虫框架入门实例

python

流程分析

抓取内容(百度贴吧:网络爬虫吧) 
页面: http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8  
数据:1.帖子标题;2.帖子作者;3.帖子回复数
通过观察页面html代码来帮助我们获得所需的数据内容。

【注】scrapy的安装请参考 : http://blog.csdn.net/zjiang1994/article/details/52689144   

一、工程建立

在控制台模式下进入你要建立工程的文件夹执行如下命令创建工程:

scrapy startproject hellospider     

 

这里的scrapytest是工程名,框架会自动在当前目录下创建一个同名的文件夹,工程文件就在里边。

(如果你用过django就会发现这一幕何其相似)。

 

我的创建过程:

   

 

我们先看一下目录结构:

  scrapy.cfg: 项目的配置文件

hellospider/: 该项目的python模块。之后您将在此加入代码。

hellospider/items.py:需要提取的数据结构定义文件。

hellospider/middlewares.py: 是和Scrapy的请求/响应处理相关联的框架。

hellospider/pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。

hellospider/settings.py: 项目的配置文件。

hellospider/spiders/: 放置spider代码的目录。

 

二、实现过程

1、在items.py中定义自己要抓取的数据:

import scrapy

class DetailItem(scrapy.Item):

# 抓取内容:1.帖子标题;2.帖子作者;3.帖子回复数

title = scrapy.Field()

author = scrapy.Field()

reply = scrapy.Field()

 

【注】上面类中的title、author、reply就像是字典中的“键”,爬到的数据就像似字典中的“值”。

2、然后在spiders目录下编辑myspider.py那个文件:

import scrapy

from hellospider.items import DetailItem

import sys

class MySpider(scrapy.Spider):

"""

name:scrapy唯一定位实例的属性,必须唯一

allowed_domains:允许爬取的域名列表,不设置表示允许爬取所有

start_urls:起始爬取列表

start_requests:它就是从start_urls中读取链接,然后使用make_requests_from_url生成Request,

这就意味我们可以在start_requests方法中根据我们自己的需求往start_urls中写入

我们自定义的规律的链接

parse:回调函数,处理response并返回处理后的数据和需要跟进的url

log:打印日志信息

closed:关闭spider

"""

# 设置name

name = "spidertieba"

# 设定域名

allowed_domains = ["baidu.com"]

# 填写爬取地址

start_urls = [

"http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8",

]

# 编写爬取方法

def parse(self, response):

for line in response.xpath('//li[@class=" j_thread_list clearfix"]'):

# 初始化item对象保存爬取的信息

item = DetailItem()

# 这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定

item['title'] = line.xpath('.//div[contains(@class,"threadlist_title pull_left j_th_tit ")]/a/text()').extract()

item['author'] = line.xpath('.//div[contains(@class,"threadlist_author pull_right")]//span[contains(@class,"frs-author-name-wrap")]/a/text()').extract()

item['reply'] = line.xpath('.//div[contains(@class,"col2_left j_threadlist_li_left")]/span/text()').extract()

yield item

【注】xpath语法可参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp 

【注】:我们可以通过命令进入scrapy shell:

           scrapy shell http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8

 

来方便的查看我们xpath代码所获得的结果,以便调试。

 

3、执行命令 scrapy crawl [类中name值]

 

 由于第二步中我们在类MySpider下定义了 name ="spidertieba" ,所以执行命令:scrapy crawl spidertieba -o items.json。 -o  指定文件。

这样我们就会看到此目录下生成了items.json文件

 items.json文件的内容就是要爬取的内容。

简单查看一下:

#!/usr/bin/env python

# Version = 3.5.2

# __auth__ = '无名小妖'

import json

with open('hellospider/items.json') as f:

rownum = 0

new_list = json.load(f)

for i in new_list:

rownum += 1

print("""line{}: title:{}, author:{}, reply:{}.""".format(rownum,

i['title'][0],

i['author'][0],

i['reply'][0]))

部分结果截图:

至此,scrapy的最简单的应用就完成了。

 

后续还会有更复杂的爬虫示例,敬请关注!

流程分析

抓取内容(百度贴吧:网络爬虫吧) 
页面: http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8  
数据:1.帖子标题;2.帖子作者;3.帖子回复数
通过观察页面html代码来帮助我们获得所需的数据内容。

【注】scrapy的安装请参考 : http://blog.csdn.net/zjiang1994/article/details/52689144   

一、工程建立

在控制台模式下进入你要建立工程的文件夹执行如下命令创建工程:

scrapy startproject hellospider     

 

这里的scrapytest是工程名,框架会自动在当前目录下创建一个同名的文件夹,工程文件就在里边。

(如果你用过django就会发现这一幕何其相似)。

 

我的创建过程:

   

 

我们先看一下目录结构:

  scrapy.cfg: 项目的配置文件

hellospider/: 该项目的python模块。之后您将在此加入代码。

hellospider/items.py:需要提取的数据结构定义文件。

hellospider/middlewares.py: 是和Scrapy的请求/响应处理相关联的框架。

hellospider/pipelines.py: 用来对items里面提取的数据做进一步处理,如保存等。

hellospider/settings.py: 项目的配置文件。

hellospider/spiders/: 放置spider代码的目录。

 

二、实现过程

1、在items.py中定义自己要抓取的数据:

import scrapy

class DetailItem(scrapy.Item):

# 抓取内容:1.帖子标题;2.帖子作者;3.帖子回复数

title = scrapy.Field()

author = scrapy.Field()

reply = scrapy.Field()

 

【注】上面类中的title、author、reply就像是字典中的“键”,爬到的数据就像似字典中的“值”。

2、然后在spiders目录下编辑myspider.py那个文件:

import scrapy

from hellospider.items import DetailItem

import sys

class MySpider(scrapy.Spider):

"""

name:scrapy唯一定位实例的属性,必须唯一

allowed_domains:允许爬取的域名列表,不设置表示允许爬取所有

start_urls:起始爬取列表

start_requests:它就是从start_urls中读取链接,然后使用make_requests_from_url生成Request,

这就意味我们可以在start_requests方法中根据我们自己的需求往start_urls中写入

我们自定义的规律的链接

parse:回调函数,处理response并返回处理后的数据和需要跟进的url

log:打印日志信息

closed:关闭spider

"""

# 设置name

name = "spidertieba"

# 设定域名

allowed_domains = ["baidu.com"]

# 填写爬取地址

start_urls = [

"http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8",

]

# 编写爬取方法

def parse(self, response):

for line in response.xpath('//li[@class=" j_thread_list clearfix"]'):

# 初始化item对象保存爬取的信息

item = DetailItem()

# 这部分是爬取部分,使用xpath的方式选择信息,具体方法根据网页结构而定

item['title'] = line.xpath('.//div[contains(@class,"threadlist_title pull_left j_th_tit ")]/a/text()').extract()

item['author'] = line.xpath('.//div[contains(@class,"threadlist_author pull_right")]//span[contains(@class,"frs-author-name-wrap")]/a/text()').extract()

item['reply'] = line.xpath('.//div[contains(@class,"col2_left j_threadlist_li_left")]/span/text()').extract()

yield item

【注】xpath语法可参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp 

【注】:我们可以通过命令进入scrapy shell:

           scrapy shell http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=utf-8

 

来方便的查看我们xpath代码所获得的结果,以便调试。

 

3、执行命令 scrapy crawl [类中name值]

 

 由于第二步中我们在类MySpider下定义了 name ="spidertieba" ,所以执行命令:scrapy crawl spidertieba -o items.json。 -o  指定文件。

这样我们就会看到此目录下生成了items.json文件

 items.json文件的内容就是要爬取的内容。

简单查看一下:

#!/usr/bin/env python

# Version = 3.5.2

# __auth__ = '无名小妖'

import json

with open('hellospider/items.json') as f:

rownum = 0

new_list = json.load(f)

for i in new_list:

rownum += 1

print("""line{}: title:{}, author:{}, reply:{}.""".format(rownum,

i['title'][0],

i['author'][0],

i['reply'][0]))

部分结果截图:

至此,scrapy的最简单的应用就完成了。

 

后续还会有更复杂的爬虫示例,敬请关注!

以上是 循序渐进Python3(十二)--0--爬虫框架入门实例 的全部内容, 来源链接: utcz.com/z/388970.html

回到顶部