scrapy(2)——scrapy爬取新浪微博(单机版)

Sina爬虫教程

 

  1. Scrapy环境搭建

 

环境:window10 + python2.7(包含scrapy+ mongoDB

 

1.1 安装集成了python2.7anaconda

 

anaconda下载链接:https://www.continuum.io/downloads

由于scrapy库目前只能在python2.7上使用,请务必确保版本正确,如果已经安装了python3.5,建议使用anaconda_2.7的版本,因为anaconda中集成了python2.7且使用anaconda安装第三库非常方便,所以可以考虑使用anaconda

 

anaconda中集成的python务必选择正确,如图1-1所示:

   

1-1 选择集成python2.7anaconda

 

1.2 scrapy库函数的安装

 

安装scrapy的时候,直接使用conda install scrapy 的命令即可,如图1-2所示:

 

1-2 cmd中安装scrapy库函数

 

pycharm中输入import s... 还没有输完IDE就会提示scrapy,则表示scrapy安装成功,如图1-3所示:

 

1-3 scrapy库函数安装成功示意图

 

由于scrapy库函数的使用相对比较麻烦,所以在这里着重对scrapy库函数的使用进行较为详细的解释。

 

1.3 mongoDB数据库的安装

 

mongoDB下载地址:https://www.mongodb.com/download-center#community

 

在下载mongoDB的时候,请选择windows平台,同时对于版本,我们选取了带有SSL的版本,如图1-4所示:

 

1-4 mongoDB下载

 

在启动mongoDB的时候,点击安装之后目录中的mongo.exe即可,如图1-5所示:

 

1-5 启动mongoDB

 

  如果出现图1-6所示的情况,则证明mongoDB可以正常使用了:

 

1-6 mongoDB正常运行示意图

 

如果不能出现图1-6所示的情况,而是如1-7中的情况:

 

1-7 安装mongoDB报错

如果出现上述的情况或者类似的情况,可能是因为缺少了VC运行环境,建议不要分别安装对应的dll文件,而是建议直接安装VS2017RC

 

VS2017RC下载链接:https://www.visualstudio.com/vs/visual-studio-2017-rc/

 

1-8 选择安装VS2017RC Community版本的IDE

 

  1. scrapy教程

 

由于scrapy库函数功能比较强大,所以在使用的时候相对比较麻烦,我们就以一个小教程开始这部分的学习。

 

 scrapy的基础入门:http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html

 

第一步:pycharm中新建一个名为Dmozpackage,如图2-1所示:

 

 

2-1 新建一个名为Dmozpackage

 

第二步:通过cmd进入Dmoz的文件夹,并输入scrapy startproject tutorial指令创建scrapy项目,如图2-2所示:

 

2-2 创建scrapy项目

 

cmd中输入上述命令并回车之后,就会生成一个树状文件目录,在pycharm可以查看该文件目录,如图2-3所示:

 

2-3 生成的树状文件目录

 

scrapy.cfg

项目的配置文件。

tutorial/

该项目的python模块,之后将在此加入代码。

tutorial/items.py

项目中的item文件。

tutorial/pipelines.py

项目中的pipelines文件

tutorial/settings.py

项目的设置文件

tutorial/spiders/

放置spider代码的目录

 

 

第三步:定义Item,它用来装在抓取的数据。通过创建一个scrapy.item.item类来声明,定义它的属性为scrapy.item.Field对象,就像一个对象关系映射(ORM)。

  我们需要做的是将item模型化,从而控制我们获得url中的数据,比如说我们希望获取待爬取网站的名称、网站的url和网站的描述,这三个索要获取的东西即为我们的域。我们只需要编辑tutorial目录下的items.py文件,修改后的内容如下:

 

                     

 

2-1 items.py文件中的变量含义

变量

含义

title

网站的名称

link

网站的url

desc

网站的描述

 

 

第四步:编写爬虫(Spider),它用于从网站爬取数据。

 

py文件的位置为:tutorialspidersdmoz_spider.py,文件目录如图2-4所示:

 

 

2-4 爬虫py文件的位置

 

dmoz_spider.py用于从网站上爬取我们需要的信息,它需要继承scrapy.Spider类,该py文件的代码中必须要包含以下内容,如表2-2所示:

 

 

 

2-2 Spider中属性含义

属性名称

属性含义

name

Spider的名称,必须唯一

allowed_domains

待爬取网站的域名

start_urls

Spider在启动时进行爬取的url列表

parse()

Spider的一个方法,用于对response进行接收并解析。

 

l name的命名(string类型)必须要做到唯一,因为name定义了scrapy如何定位并初始化spider,所以必须唯一。

l allowed_domains包含了spider所允许爬取的域名,以list方式存储;

l start_urls列表的作用是防止没有指定特定的url的时候,spider可以从列表中的url开始进行爬取,第一个被获取到的页面的url将是该列表之一,后续的url将会从获取到的数据中提取;

l parse()方法被调用的时候,每个初始url完成下载后生成的response对象将作为唯一的参数传递给该函数,它会负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的urlrequest对象。

 

第五步:爬取网站数据,通过执行scrapy crawl dmoz来启动spider执行的时候,用cmd跳到爬虫的目录中再执行“scrapy crawl dmoz”,如图2-5所示

 

 

 

2-5 执行爬取指令

 

Scrapy为爬虫的 start_urls属性中的每个URL创建了一个 scrapy.http.Request 对象 ,并将爬虫的parse 方法指定为回调函数。 
这些 Request首先被调度,然后被执行,之后通过parse()方法,scrapy.http.Response 对象被返回,结果也被反馈给爬虫。

 

执行完指令之后,在命令行中会有如下的输出信息,如图2-6所示:

 

2-6 日志信息

 

在这些输出的内容中,包含着scrapy爬虫运行的日志信息。

包含 [dmoz]的那些行,那对应着爬虫的日志。你可以看到start_urls中定义的每个URL(存储在dmoz_spider.py中的start_urlslist中)都有日志行。由于这些URL是起始页面,所以他们没有引用(referrers),所以在每行的末尾你会看到 (referer: <None>)
正是因为我们的dmoz_spider.py文件中的parse()方法的存在,pars()方法的作用下,两个文件被创建filename = response.url.split("/")[-2]:分别是 Books Resources,这两个文件中有URL的页面内容f.write(response.body) 

 

我们将命令行中的日志信息保存下来,这些日志信息可以帮助我们了解爬虫的运行状态,对于分析爬虫具有很大的帮助。

 

                 

 

在运行完上述指令之后,pars()方法的作用下,两个文件被创建filename = response.url.split("/")[-2]:分别是 Books Resources,这两个文件中有URL的页面内容f.write(response.body) 如图2-7所示:

 

2-7 生成文件示意图

 

第六步:提取itemscrapy使用的是XPath selector的机制,这种机制是基于XPath表达式来实现的。

在使用XPath的时候,scrapy中有两种类可供选择,第一种是HtmlXPathSelectorHTML数据解析),第二种是XmlPathSelectorXML数据解析)。

从网页中提取数据有很多方法。Scrapy使用了一种基于 XPath  CSS 表达式机制Scrapy Selectors

为了介绍Selector的使用方法,接下来我们将要使用内置的 Scrapy shell Scrapy Shell需要您预装好IPythonanaconda已经预装了ipython,使用的时候只需要在命令行中输入ipython即可,如图2-8所示:

 

2-8 IPython执行示意图

 

如果使用的不是anaconda,可以从这里下载:ipyhton下载地址

 

安装了ipython之后,需要进入项目的根目录,执行如图2-9所示的命令来启动shell:

 

2-9 启动shell

    如果启动失败,可以尝试加上双引号,即 scrapy shell “http://www.dmoz.org/Computers/Programming/Languages/Python/Books/”

将会获得如下的输出:

 

                

 

在这里有一些非常重要的信息,如图2-10所示:

 

 

2-10 scrapy object

 

这些是可用的对象和函数列表。

 

上述的shell载入之后,我们得到了一个包含response的数据的本地response变量,我们可以输入指令“response.body”查看response的包体,可以输入指令“response.headers”查看response的包头,如图2-11所示:

 

2-11 获取的response的包头信息

 

除了上述两个简单的指令之外,response.selector”指令对于我们更有意义,如图2-12所示:

 

2-12 通过reponse.selector获取用于查询的selector

 

通过输入response.selector可以获取一个可以用于查询返回数据的selector,以及映射到response.selector.xpath()  response.selector.css()的 快捷方法(shortcut): response.xpath()  response.css() 

同时,shell根据response提前初始化了变量sel,该selector能够根据response的类型自动选择最合适的分析规则(XML或者HTML)。

 

注意在之前图2-10中显示的可用的对象和函数中没有包含sel方法,所以如图2-13所示,如果我们直接使用,会报错,所以改为使用response.xpath()方法,以及与之对应的response.xpath().extract()方法。具体的情况如图2-13所示:

 

2-13 使用response.xpath()response内容进行分析

 

第七步:提取有用的数据。我们使用response.body可以获取response中的内容,可以通过阅读网页源码选择合适的xpath表达式。

spider中如果需要引用其他的class,可能会出现保存的情况,如图2-14所示:

 

2-14 不能正确引入其他py文件中的class

 

在这里,虽然导入了正确的class,但是仍然报错,为解决这个问题,首先清除缓存,如图2-15所示:

 

2-15 清除缓存

 

清除缓存之后如果仍然不能恢复,此时需要将整个爬虫文件设置为源目录,如图2-16所示:

 

2-16 将爬虫文件目录设置为源目录

 

修改完之后,使用指令“scrapy crawl dmoz -o items.json”即可将爬取的内容保存为json格式的文件,如图2-17所示:

 

2-17 将爬取的内容以json格式保存

 

3.新浪爬虫

 

第一步:mongoDB设置

首先在建立mongoDB所需要的文件夹,如图3-1所示:

 

3-1 建立mongoDB需要的文件夹

 

db文件夹用于存储数据,log文件夹用于存储日志信息,log文件夹中需要新建一个mongoDB.log文件;

bin文件夹是解压的mongoDB文件中的bin文件夹,直接copy过来即可。

 

然后cmd跳转到bin文件夹下,执行“mongod --dbpath=D:\databases\mongo\db”,如图3-2所示:

 

3-2 配置mongoDB数据的存储位置

 

这一步的作用是配置mongodb,制定了数据的存储位置,具体的dbpath根据你的db文件夹的位置来设置。

 

在浏览器中访问http://localhost:27017/”,如果出现如图3-3所示的情况,代表mongoDB开启成功。

 

3-3 mongoDB开启成功示意图

 

第二步:新建scrapy项目

 

①新建一个文件夹,如图3-4所示:

 

3-4 新建文件夹用于存储scrapy项目

 

在上述的文件夹下执行指令scrapy crawl Sina_spider1”新建一个scrapy项目,如图3-5所示:

3-5 新建一个scrapy项目

 

pycharm中将相应配置文件全部写好,并编写spider.py文件用于爬取微博,如图3-6所示:

 

3-6 文件树示意图

 

cookies.py中将购买的微博账号全部加进去,防止爬虫被微博识别,由于微博的反扒机制越来越成熟,建议账号在50个左右,多多益善。

spiders.py中填入你想要爬取的微博ID,如图3-8所示:

 

3-8 待爬取微博ID信息

 

settings.py中设置合理的间隔时间,建议大于1.5,在这里用的是1.8,如图3-9所示:

 

3-9 设置合适的间隔时间

 

Begin.py中设置用cmdline控制爬虫开始,如图3-10所示:

 

3-10 设置cmdline控制爬虫开始爬取指令

 

cmd跳入到scrapy文件夹下,执行指令“scrapy crawl sinaSpider”指令,如图3-11所示:

3-11 执行爬虫

 

具体的爬虫执行过程可以从shell中看到,如图3-12所示:

3-12 爬取过程示意图

 

第三步:用mongoDB可视化工具查看数据

在这里我们选用的是mongobooster,除此之外也可以选用robomongo等工具,但效果大同小异。

在数据库中,存储着InformationTweetsFollowsFans四张表,在这些表中,information表和tweets表比较重要。

1 Information表中字段的含义

_id

采用 “用户ID” 作为唯一标识

Birthday

出生日期

City

城市

Gender

性别

Marriage

婚姻状况

NickName

昵称

Num_Fans

粉丝数量

Num_Follows

关注数量

Num_Tweets

已转发微博数

Province

所在省份

Signature

签名

URL

微博个人主页链接

 

 

3-13 Information表中的数据示意图

 

2 Tweets表中字段的含义

_id

采用 “用户ID” 作为唯一标识

Co_oridinates

发微博时的定位坐标(经纬度)

Comment

微博被评论的数量

Content

微博的内容

ID

用户ID

Like

微博被点赞的数量

PubTime

微博发表时间

Tools

发微博的工具

Transfer

微博被转发的数量

 

 

 

 

3-14 Tweets表中的数据示意图

转载于:https://www.cnblogs.com/Mr24/p/6425989.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供爬虫教程,以下是使用Scrapy框架爬取豆瓣电影TOP250的步骤: 1. 创建Scrapy项目 首先需要使用Scrapy命令行工具创建一个Scrapy项目,可以使用以下命令: ``` scrapy startproject douban_top250 ``` 该命令将会在当前目录下创建一个名为douban_top250的Scrapy项目。 2. 创建Spider 接下来需要创建一个Spider来定义爬取的规则,可以使用以下命令在Scrapy项目的spiders目录下创建一个名为douban_spider的Spider: ``` scrapy genspider douban_spider movie.douban.com ``` 在spiders目录下会生成一个名为douban_spider.py的文件,我们可以在该文件中定义爬取规则。 3. 编写Spider规则 在douban_spider.py文件中,我们需要定义如何爬取豆瓣电影TOP250的规则,以下是一个简单的例子: ```python import scrapy from scrapy import Selector from douban_top250.items import DoubanTop250Item class DoubanSpider(scrapy.Spider): name = "douban_spider" allowed_domains = ["movie.douban.com"] start_urls = [ "https://movie.douban.com/top250" ] def parse(self, response): selector = Selector(response) item_list = selector.xpath('//ol[@class="grid_view"]/li') for item in item_list: douban_item = DoubanTop250Item() douban_item['rank'] = item.xpath('div[@class="pic"]/em/text()').extract()[0] douban_item['title'] = item.xpath('div[@class="info"]/div[@class="hd"]/a/span[@class="title"]/text()').extract()[0] douban_item['rating'] = item.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()[0] douban_item['quote'] = item.xpath('div[@class="info"]/div[@class="bd"]/p[@class="quote"]/span[@class="inq"]/text()').extract()[0] yield douban_item ``` 在上述代码中,我们定义了一个名为DoubanSpider的Spider,并定义了一些爬取规则: - allowed_domains:定义允许爬取的域名; - start_urls:定义爬虫开始爬取的URL列表; - parse:定义如何解析响应结果,生成Item对象。 4. 定义Item 在上述代码中,我们定义了一个名为DoubanTop250Item的Item,需要在douban_top250/items.py文件中定义该Item,以下是一个简单的例子: ```python import scrapy class DoubanTop250Item(scrapy.Item): rank = scrapy.Field() title = scrapy.Field() rating = scrapy.Field() quote = scrapy.Field() ``` 在上述代码中,我们定义了DoubanTop250Item包含以下字段: - rank:电影排名; - title:电影名称; - rating:电影评分; - quote:电影的经典语录。 5. 运行Spider 在完成上述步骤后,就可以运行Spider开始爬取豆瓣电影TOP250了,可以通过以下命令来运行Spider: ``` scrapy crawl douban_spider -o douban_top250.csv ``` 该命令将会运行名为douban_spider的Spider,并将结果保存到douban_top250.csv文件中。 以上就是使用Scrapy爬取豆瓣电影TOP250的基本步骤,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值