scrapy框架下第一只爬虫!
学习素材
整合学习的fishc.com知识,加巩固学习,不作其他目的!新手上路,前辈指教
今天学习了scrapy框架编写第一只爬虫,爬取的url:http://www.dmoztools.net
这是一个分类导航网站
_________________________________________________________________________________________________分割线
目的:希望把标题、超链接、描述都保存到一个文件中
正文
1、新建一个爬虫
打开cmd,切换目录到桌面:cd Desktop(默认为你的用户名所在地,C://user,使用cd /d D:// 路径 切换到具体文件夹)
新建爬虫scrapy startproject tutorial
(新建爬虫的另一种方法:)
桌面出现了tutorial的文件夹,里面的文件有
spider是从网页爬取数据的类
2、编辑items
items的作用是存储爬取数据的容器,它就是类似于字典,定义一个item的方法很简单,只要继承scrapy.item类,并将所有字段定义为scrapy.Field()即可。
class TutorialItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
3.编写spider
在spiders中新建一个爬虫,命名dmoz_spider.py,代码如下
import scrapy
class DmozSpider(scrapy.Spider):
name = "dmoz"
allow_domains = "dmoztools.net"
start_urls = [
'http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/',
'http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/'
]
def parse(self,response):
filename = response.url.split('/')[-2]
with open(filename,'wb') as f:
f.write(response.body)
为验证爬取过程,先将其打印出来
注意:
(1)每个爬虫的name是惟一的,就是后面cmd中的调用名
(2)domain指的是爬虫的爬取范围
(3)列表中有一个逗号
4、test
进入cmd,进入爬虫文件夹cd tutorial
运行 scrapy crawl dmoz
(dmoz是爬虫的唯一名字!)
屏幕截图
可以看到,成功爬取到了整个网页内容,接下来要做的就是从中提取出我们需要的title、link和description。我们使用selector来实现
seletor的方法有:
xpath()–传入xpath表达式,返回对应的一个列表
css()–传入css表达式,返回对应的一个列表
extract()–序列化该节点,返回一个列表
re()–传入正则表达式,返回一个列表
5、爬取title示例
对title检查
可以看到,
title的目录为
sel.xpath(’//div/div/div[@class=“title-and-desc”]/a/div/text()’).extract(),
link的目录为sel.xpaht(’//div/div/div/a/@href’).extract()
desc的目录为sel.xpath(’//div/div/div/div[@class="site-descr "]/text()’).extract()
在cmd中验证:scrapy shell url
这时候可以用response了,response.body返回网页代码,response.headers返回网页的headers。
sel.xpath(’//div/div/div/a/div/text()’).extract()
得到title,测试成功,其他依旧,测试结果中相关的
6.修改爬虫
import scrapy
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = "dmoztools.net"
start_urls = [
'http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/',
'http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/'
]
def parse(self,response):
sel = scrapy.selector.Selector(response)
sites = sel.xpath('//div/div/div[@class="title-and-desc"]')
for site in sites:
title = site.xpath('a/div/text()').extract()
link = site.xpath('a/@href').extract()
desc = site.xpath('div[@class="site-descr "]/text()').extract()
print(title,link,desc)
测试打印成功;
屏幕截图
7.存储数据
测试成功后,就要将数据存储到item容器里面 ,
import scrapy
from tutorial.items import TutorialItem #导入item模块
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = "dmoztools.net"
start_urls = [
'http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/',
'http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/'
]
def parse(self,response):
sel = scrapy.selector.Selector(response)
sites = sel.xpath('//div/div/div[@class="title-and-desc"]')
items = []
for site in sites:
item = TutorialItem() #实例出一个对象
item['title'] = site.xpath('a/div/text()').extract()
item['link'] = site.xpath('a/@href').extract()
item['desc'] = site.xpath('div[@class="site-descr "]/text()').extract()
items.append(item)
return items
运行scrapy crawl dmoz结果
接下来要将数据存储为json格式,
scrapy crawl dmoz -o item.json -t json
本文地址:https://blog.csdn.net/qq_43680223/article/details/85958956