Python爬虫入门-利用scrapy爬取淘女郎照片
2017-09-28 16:43
561 查看
最近看到有个相对来说比较简单的可以爬取淘女郎的链接地址,它主要可以通过改变URL中page参数来实现翻页。
我们这个这个链接进入到一个淘女郎的页面,进入相册页面,里面有很多相册,我们打开其中一个,可以发现照片是慢慢加载出来的,打开F12,刷新,过滤出所有的JS请求,然后不断下拉照片,可以发现也不断有一些JS请求加载出来,打开response,可以看到里面返回的是json格式的数据,里面就有我们要获取的图片的链接地址:
讲上面几个URL拷贝出来对比一下,并进行简化,可以看出要想得到图片的链接地址,我们就要构造出含有use_id、album_id、page三个重要参数的URL:
我们返回到这个淘女郎有所有相册的这个页面,同样F12、刷新,选中XRH,然后点击下面的翻页,可以看出有相关的请求加载出来,并且在response中有我们想要的album_id:
将请求的URL拷贝下来对比一下,并进行简化,可见要获得所有相册的album_id,我们需要构建出含有user_id和page两个参数的URL(由于还没有想到如何更好的获取这个page,所以在后面我就默认page为1,也就是只获取第一页相册页的内容):
我们再返回起始页,F12、刷新在原始的请求里面就有各个淘女郎的信息,我们可以提取到链接,然后利用正则就可以将user_id提取出来:
下面就可以开始写代码了:
这个是最终的运行结果:
这是下载下来的淘女郎的照片(此处若有涉及侵权我将第一时间删除):
存在的问题:
1、代码中有好几个地方还是可以再完善一下的
2、写代码中还是会出现卡壳的情况,有些地方还不是运用的很熟练
3、还是要多学新知识、运用新知识来解决问题
我们这个这个链接进入到一个淘女郎的页面,进入相册页面,里面有很多相册,我们打开其中一个,可以发现照片是慢慢加载出来的,打开F12,刷新,过滤出所有的JS请求,然后不断下拉照片,可以发现也不断有一些JS请求加载出来,打开response,可以看到里面返回的是json格式的数据,里面就有我们要获取的图片的链接地址:
讲上面几个URL拷贝出来对比一下,并进行简化,可以看出要想得到图片的链接地址,我们就要构造出含有use_id、album_id、page三个重要参数的URL:
我们返回到这个淘女郎有所有相册的这个页面,同样F12、刷新,选中XRH,然后点击下面的翻页,可以看出有相关的请求加载出来,并且在response中有我们想要的album_id:
将请求的URL拷贝下来对比一下,并进行简化,可见要获得所有相册的album_id,我们需要构建出含有user_id和page两个参数的URL(由于还没有想到如何更好的获取这个page,所以在后面我就默认page为1,也就是只获取第一页相册页的内容):
我们再返回起始页,F12、刷新在原始的请求里面就有各个淘女郎的信息,我们可以提取到链接,然后利用正则就可以将user_id提取出来:
下面就可以开始写代码了:
taobao.py: from Taonvlang.items import TaonvlangItem from bs4 import< 4000 /span> BeautifulSoup import re import json class TaobaoSpider(scrapy.Spider): Num=1 name = 'taobao' # allowed_domains = ['www.taobao.com'] def start_requests(self): urls=['https://mm.taobao.com/json/request_top_list.htm?page={}'.format(i) for i in range(1,2)] for url in urls: yield scrapy.Request(url,callback=self.parse_user_id) def parse_user_id(self, response): urls=response.css('.list-item .personal-info .pic-word .top a::attr(href)').extract() user_ids=[url.split('=')[-1] for url in urls if url] for user_id in user_ids: url='https://mm.taobao.com/self/album/open_album_list.htm?_charset=utf-8&user_id%20={}&page=1'.format(user_id) yield scrapy.Request(url,meta={'user_id':user_id},callback=self.parse_album_id) def parse_album_id(self, response): user_id=response.meta.get('user_id') if response.status==200: html=response.text soup=BeautifulSoup(html,'lxml') results=soup.select('.mm-photo-list.clearfix .mm-photo-cell') for result in results: link=result.select('.mm-photo-cell-middle h4 a')[0]['href'] album_id=re.search('album_id=(.*?)&',link).group(1) page_content=result.select('.mm-photo-cell-middle .mm-pic-number')[0].text pages=int(re.findall('\d+',page_content)[0]) for page in range(1,int(pages/16)+2): print('开始处理用户:{},相册编号:{},第{}页,#{}'.format(user_id,album_id,page,self.Num)) self.Num=self.Num+1 url='https://mm.taobao.com/album/json/get_album_photo_list.htm?user_id='+str(user_id)+'&album_id='+str(album_id)+'&page='+str(page) yield scrapy.Request(url,callback=self.parse) def parse(self,response): item=TaonvlangItem() html=response.text contents=json.loads(html) piclists=contents.get('picList') for piclist in piclists: item['user_id'] = piclist.get('userId') item['album_id'] = piclist.get('albumId') item['title']=piclist.get('des') item['picurl']='http:'+piclist.get('picUrl').replace('_290x10000','_620x10000') yield item
settings.py: BOT_NAME = 'Taonvlang' SPIDER_MODULES = ['Taonvlang.spiders'] NEWSPIDER_MODULE = 'Taonvlang.spiders' MONGO_URI='localhost' MONGO_DB='taonvlang' ROBOTSTXT_OBEY = False DOWNLOAD_DELAY = 0.5 COOKIES_ENABLED = False DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'user-agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'cookie':'tracknick=tb4192332_2012; _cc_=U%2BGCWk%2F7og%3D%3D; tg=0; UM_distinctid=15dbfe52514207-04b2f5bc0dad73-5c6a3a7a-100200-15dbfe52516189; miid=1819893462062305719; hng=CN%7Czh-CN%7CCNY%7C156; thw=cn; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; CNZZDATA30063598=cnzz_eid%3D1240630502-1506404882-https%253A%252F%252Fmm.taobao.com%252F%26ntime%3D1506410623; mt=ci%3D-1_0; v=0; cookie2=1f2c6d580c0f148fbc23e44a72de8f8f; t=161b12068ebd1c81ad307468bd85c61c; _tb_token_=51e38b59445f8; CNZZDATA30064598=cnzz_eid%3D1465862291-1506410103-https%253A%252F%252Fmm.taobao.com%252F%26ntime%3D1506497588; CNZZDATA30063600=cnzz_eid%3D657822935-1506407601-https%253A%252F%252Fmm.taobao.com%252F%26ntime%3D1506497588; cna=KHPKEQF/owQCAd5P091TEN2z; isg=AqWlkF1UEG9PMHRxJxBdyAqptGGxCilIDLs31KeKYVzrvsUwbzJpRDNePhQz; JSESSIONID=94615D4E06F9128BD591C9C4B3A69B13; uc1=cookie14=UoTcCfQsoQo68g%3D%3D' } ITEM_PIPELINES = { 'Taonvlang.pipelines.MyImagesPipeline':1, 'Taonvlang.pipelines.MongoPipeline': 300, } IMAGES_STORE='E:\python\Pycharm\Taonvlang' IMAGES_EXPIRES=90 IMAGES_THUMBS={ 'small':(50,50), 'big':(200,200), }
这个是最终的运行结果:
这是下载下来的淘女郎的照片(此处若有涉及侵权我将第一时间删除):
存在的问题:
1、代码中有好几个地方还是可以再完善一下的
2、写代码中还是会出现卡壳的情况,有些地方还不是运用的很熟练
3、还是要多学新知识、运用新知识来解决问题
相关文章推荐
- python爬虫入门教程--利用requests构建知乎API(三)
- Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
- Python爬虫从入门到放弃(二十四)之 Scrapy登录知乎
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Python爬虫从入门到放弃(二十四)之 Scrapy登录知乎
- 数据可视化 三步走(一):数据采集与存储,利用python爬虫框架scrapy爬取网络数据并存储
- Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法
- Python的爬虫程序编写框架Scrapy入门学习教程
- Python 爬虫学习 —— Scrapy 入门知识学习
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Python 爬虫入门 1 了解爬虫Scrapy
- python爬虫入门(四)利用多线程爬虫
- Python爬虫从入门到放弃(二十四)之 Scrapy登录知乎
- python3 [爬虫入门实战]爬虫之scrapy爬取织梦者网站并存mongoDB
- Python 利用scrapy爬虫通过短短50行代码下载整站短视频
- Python爬虫Scrapy(二)_入门案例
- Python爬虫从入门到放弃(十三)之 Scrapy框架的命令行详解
- python3 [爬虫入门实战]爬虫之scrapy爬取织梦者网站并存mongoDB
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法