Scrapy入门及第一个程序
标签:Scrapy ;第一个Scrapy项目
一、认识Scrapy
Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
二、爬虫编写步骤
1.新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
2.明确目标 (编写items.py):明确你想要抓取的目标
3.制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
4.存储内容 (pipelines.py):设计管道存储爬取内容
三、具体实现过程:
在开始之前,我们需要创建一个新的Scrapy项目。然后进入自定义的目录中,运行下列命令:
scrapy startproject myfirstpjt
其中,myfirstpjt 为项目名称,可以看到将会创建一个 myfirstpjt 文件夹,目录结构如下:
接下面来来简单介绍一下各个主要文件的作用:
scrapy.cfg :项目的配置文件
myfirstpjt :项目的Python模块,将会从这里引用代码
myfirstpjt/items.py :项目的目标文件
myfirstpjt/pipelines.py :项目的管道文件
myfirstpjt/settings.py :项目的设置文件
myfirstpjt/spiders/ :存储爬虫代码目录
二、编写items文件(myfirstpjt/items.py)
我们打算抓取:sina.com.cn
网站里的一些新闻之类的信息。
打开mySpider目录下的items.py
Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。
可以通过创建一个 scrapy.Item 类, 并且定义类型为
scrapy.Field的类属性来定义一个Item。
接下来,创建一个ItcastItem 类,和构建item模型(model)。
import scrapy
class MyfirstpjtItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
urlname = scrapy.Field()
urlkey = scrapy.Field()
urlcr = scrapy.Field()
urladdr = scrapy.Field()
三、制作爬虫 (spiders/itcastSpider.py)
爬虫功能要分两步:
- 爬数据
在当前目录下输入命令,将在myfirstpjt/spider目录下创建一个名为wesuen的爬虫:
import scrapy
from myfirstpjt.items import MyfirstpjtItem
class WeisuenSpider(scrapy.Spider):
name = "weisuen"
allowed_domains = ["sina.com.cn"]
start_urls = (
'http://slide.news.sina.com.cn/s/slide_1_2841_103185.html',
'http://slide.mil.news.sina.com.cn/k/slide_8_193_45192.html#p=1',
'http://news.sina.com.cn/pl/2016-09-12/doc-ifxvukhv8147404.shtml',
)
def parse(self, response):
item=MyfirstpjtItem()
item["urlname"]=response.xpath("/html/head/title/text()")
print(item["urlname"])
四、XPath
接下来介绍一下XPath:
XPath主要根据网页代码的不同筛选数据,
比如代码:
<html>
<head><title>标题</title></head>
<body>
<h2>
爬虫与Scrapy
</h2>
<p>....
</p>
</body>
</html>
我们要提取上面标签里的信息,我们可以这样:
用‘/’来选择某个标签,比如要提取
如果需要文本信息的话,可以用text()实现:
/html/body/h2/text()
当然,出现多个标签的时候,我们也可以用‘//’来吧所有的信息提取出来,比如
标签:
//p
在平时,我们有事会看到这样的代码:
<div class="1212">
<div class="2255">
<img scr="http://snbjbcishnso....." class ="f">
<img scr="http://snbjbcishnso....." class ="f">
</div>
如果想获得所有属性X的值为Y的标签的内容,可以使用”//Z[@X=”Y”]”的方式,比如,想获取上书代码中class 属性为f的标签的内容,可以根据这种方式获取:
//img[@class =”f”]
好了,差不多就是这些了,我也是参考书籍来做的,不足之处,大家指点!!!