scrapy爬虫入门很简单,推荐一个入门中文网站:[http://www.scrapyd.cn/doc/],在此不再赘述
一、 爬取图片时,能够拿到图片的url,但是使用scrapy的pipelines保存图片时,遇到了错误,报警如下:
[scrapy.core.engine] DEBUG: Crawled (404) <GET https://newimg.uumtu.com/Thumb/2019/0417/d026c93782fa0a9014d13a97195902d8.jpg> (refer
er: None)
当你用图片的url直接用浏览器访问时,也会出现访问不到的情况,如下:
当从爬虫的目标网站点击连接跳转到该图片时,就不会出现这样的情况。
此时,需要在请求的header里手动添加Referer
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
'Referer': 'https://www.uumtu.com/weimei/41428_5.html',
}
class ImagespiderPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
yield scrapy.Request(url=item['imgurl'][0], meta={'item': item},headers=headers)
Referer
的值,一般可以是你要爬取的网站的随便一个页面的url(一般不可能网站自己不认识自己的url),例如,我要保存的图片的url为https://newimg.uumtu.com/Thumb/2019/0422/c85e0cccaded41ab058f4a616ec104c4.jpg
,那么我可以把Referer
设置为https://www.uumtu.com/weimei/41428_5.html
(该网站的一个页面)
二、Referer的作用
- 防盗链
假如在www.google.com
里有一个www.baidu.com
链接,那么点击这个www.baidu.com
,它的header信息里就有:
Referer : http://www.google.com
假如www.baidu.com
只允许自己的网站访问自己的图片服务器,那么www.baidu.com
图片服务器每次取到Referer
来判断一下是不是我自己的域名www.baidu.com
,如果是就继续访问,不是就拦截。
- 防止恶意请求
这个就不多说了,我们爬取网站的过程,本身就是一种恶意的请求。