scrapy 爬虫框架学习
目标网站:段子网
创建项目:
在mmd中或者在pycharm的Terminal中运行命令
scrapy startproject text
(text为项目名称)
该命令将会创建包含下列内容的 text 目录:
test/
scrapy.cfg
test/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
这些文件分别是:
-
scrapy.cfg
: 项目的配置文件 -
tutorial/
: 该项目的python模块。之后您将在此加入代码。 -
tutorial/items.py
: 项目中的item文件. -
tutorial/pipelines.py
: 项目中的pipelines文件. -
tutorial/settings.py
: 项目的设置文件. -
tutorial/spiders/
: 放置spider代码的目录.
定义Item
Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。
类似在ORM中做的一样,您可以通过创建一个 scrapy.Item
类,
并且定义类型为 scrapy.Field
的类属性来定义一个Item。
(如果不了解ORM, 不用担心,您会发现这个步骤非常简单)
首先根据需要从dmoz.org获取到的数据对item进行建模。
我们需要从dmoz中获取名字,url,以及网站的描述。
对此,在item中定义相应的字段。编辑 tutorial
目录中的 items.py
文件:
import scrapy
class DmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
一开始这看起来可能有点复杂,但是通过定义item, 您可以很方便的使用Scrapy的其他方法。而这些方法需要知道您的item的定义。
使用命令创建一个爬虫
记得切换目录到与spider文件夹一个级别
scrapy genspider duanzi "ishuo.cn"
创建了一个名字是duanzi的爬虫(爬虫名字不能与项目名字重复),并且能爬取的网页只能限制在ishuo.cn这个域名下,这样就可以在spider目录下发现新建的duanzi.py
看一下spider.py下的代码
# -*- coding: utf-8 -*-
import scrapy
class DuanziSpider(scrapy.Spider):
name = 'duanzi'
allowed_domains = ["ishuo.cn"]
start_urls = ["https://ishuo.cn/"]
def parse(self, response):
pass
-
name
: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。 -
start_urls
: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。 -
parse()
是spider的一个方法。 被调用时,每个初始URL完成下载后生成的Response
对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的Request
对象。
Scrapy为Spider的 start_urls
属性中的每个URL创建了 scrapy.Request
对象,并将 parse
方法作为回调函数(callback)赋值给了Request。
Request对象经过调度,执行生成 scrapy.http.Response
对象并送回给spider parse()
方法。
继续对parse()函数进行编写,此处可以使用Selectors选择器
def parse(self, response):
for sel in response.xpath('//*[@id="list"]/ul'):
text = sel.xpath('.//div[contains(@class,"content")]/text()').extract()
text2 = sel.xpath('.//div[contains(@class,"info")]/a/text()').extract()
for i in text:
print(i)
这里就成功的拿到了段子
如果你得罪了老板,失去的只是一份工作;如果你得罪了客户,失去的不过是一份订单;是的,世上只有一个人可以得罪:你给她脸色看,你冲她发牢骚
,你大声顶撞她,甚至当 着她的面摔碗,她都不会记恨你,原因很简单,因为她是你的母亲。
有位非常漂亮的女同事,有天起晚了没有时间化妆便急忙冲到公司。结果那天她被记旷工了……吃惊]
悟空和唐僧一起上某卫视非诚勿扰,悟空上台,24盏灯全灭。理由:1.没房没车只有一根破棍. 2.保镖职业危险.3.动不动打妖精,对女生不温柔. 4.坐过牢,
曾被压五指山下500年。唐僧上台,哗!灯全亮。 理由:1.公务员; 2.皇上兄弟,后台最硬 3.精通梵文等外语 4.长得帅 5.最关键一点:有宝马!
Save your heart for someone who cares. 为了某个在乎你的人,请节约你的真心!