1,创建项目 scrapy startproject 项目名
2,创建spiders爬虫文件 Scrapy genspider sipider名字 网址(占位)
3,打开spider文件-->将待爬取的url放到start_urls中
start_urls--起始url,scrapy启动之后,就开始下载start_urls里面的url。
scrapy将start_urls里面的url下载好后的response就交给这个方法来处理
4,更改settings.py中的配置
1,scrapy默认是遵守robots,将rotbos协议改为False
ROBOTXT_OBET=False
2,设置下载的请求头。
'User-Agent':''
'Accept':''
'Accept-Language':''
3,如果将cookie加入请求头,想要让他生效,还必须在打开一条配置
cookie_enabled=False
这条配置主要是将scrapy下载时自己的cookie关闭,就可以使用户自定义cookie了。
5,在parse方法中,验证response中是否有数据。
def parse(self,response):
print(response.text)
6,在item.py中定义要爬取的字段。
class GubItem(scrapy.Item):
read_num=scrapy.Field()
comment=scrapy.Field()
title=scrapy.Field()
href=scrapy.Field()
7,在parse方法中实现数据提取逻辑
Response有xpath方法
[Selector对象]=Response.xpath('xpath表达式')
从selector对象汇总提取字符串的方法有两个:
1,Extract()--从一个列表中提取每个selector对象的内容
2,Extract_first()--提取出列表中获取第一个selector对象的内容。
提取样板:
for li in li_list:
item=GubItem()
8,保存数据到mongo
(1)将提取完善的item,用yield返回
yield item
(2)在pipelines.py中实现处理这个返回的item的逻辑。如果想要pipelines生效,也就是让他能够拿到item,必须做配置:
'music_163.pipelines.Music163Pipeline'--》pipelines中类的全路径:300,
类的全路径其实就是可以确认找到这个类的路径。
(3)在这个类中实现保存item的代码:
import pymongo
class Music163Pipeline(object):
def __init__(self):
self._clinet=pymongo.MongoClient()
self._db=self._clinet['music']
def get_md5(self,value):
return hashlib.md5(bytes(value,enconding='utf-8')).hxdigest()
def process_item(self,item,spider):
#设置一个专门用来做更新的字段,这个字段是不能重复的
item['detail_hash']=self.get_md5(item['detail_url'])
self._db['singer'].update({'detail_hash':item['detail_hash']},{'$set':dict(item)},true)
print(item)
return item
9,下载中间件:
Scrapy主要告诉他我们要下载的url,或者是yield出去的scrapy.Request对象,他都会让我们下载,但是有时候我们想自己下载,比如使用selenium+phantomjs。这时候,必须使用下载中间件来提前获取下载的request对象,就可以做到提前下载。
下载中间件可以理解为,scrapy下载前,实现的一个接口,你可以在接口中提前获取马上就要下载的request对象,进而做一些对request对象的处理。
处理方式:
使用selenium
设置请求头
设置代理
设置中间件的步骤:
(1)新建一个py文件,my_middle_wares.py
(2)写一个类,这个类中实现process_reqeust方法,这个方法就是下载中间件截取request方法。
def process_request(self,request,spider):
(3)想要让中间件生效,必须在settings.py配置
downloader_middlewares={
'douban.,y_middler_wares.MyMiddleWares':543,
}
10、可以通过命令直接将爬取的保存到对应文件中。
首先:
yield item
保存到json文件:
保存到csv文件
Scrapy crawl guba_spider-o guba.csv
11,scrapy发送二次请求
#发送二次请求,将url封装scrapy.Request对象,scrapy就会按照request设置取下载。
yield scrapy.Request(
url=new_url
callback=self.parse_area,#回调函数,将来scrapy下载好的response由哪个方法来处理。
enconding='utf-8',
Meta={'data'.item}
)
Meta是用来从requests对象到response对象传递参数的参数。
在requests对象中设置好之后,在response中调用:
Item=response.meta['data']
new_url='首页路由'+area
#发送二次请求,将url封装scrapy.Request对象,scrapy就会按照request设置下载去下载
yield scrapy.Request(
url=new_url
callback=self.parse_area,#回调函数,将来scrapy下载好的response由哪个方法来处理。
enconding='utf-8'
)
Last、启动scrapy项目
Scrapy crawl spider文件的name属性 如果不想要看配置信息,增加一个--nolog参数
baidu>scrapy crawl baidu_spider --nolog
通过文件来启动scrapy
创建main文件
from scrapy import cmdline
cmdline.execute('scrapy crawl music_spider --nolog'.split())
scrapy的开发流程 笔记10
最新推荐文章于 2020-12-03 10:44:45 发布