(新手)Scrapy爬取煎蛋妹子图
来社区也已经20来天了,看到各位大佬操作猛如虎,我这个新手只能躲在角落里默默鼓掌{:301_1003:}编程区里面看到很多大佬分享心得
有目录式的:一篇一篇,由浅入深;有项目式的,一篇一个项目
今天小弟我,分享一下爬取煎蛋网的妹子图心得
(第一次发帖,不知道清不清楚)——————————————————————————————————————————————————————————————————
贴出网址,http://jandan.net/ooxx进cmd建立一个scrapy项目,然后再创建一个spider,语法可以在网上查到
在item中创建我们需要取到的信息对象import scrapy
class JiandanpItem(scrapy.Item):
img_name = scrapy.Field()
img_url = scrapy.Field()这里我就创建了两个
在爬虫spider里就是重头戏了,使用xpath,css等选择器爬取网页中有用的信息,如下:
# -*- coding: utf-8 -*-
import scrapy
import base64
from jiandanP import items
class JiandanSpider(scrapy.Spider):
name = 'jiandan'
allowed_domains = ['jandan.net']
start_urls = ['http://jandan.net/ooxx']
def parse(self, response):
img = response.xpath('//div[@id="comments"]/ol[@class="commentlist"]/li[@id]')
for i in img:
img_name = i.xpath('.//span[@class="righttext"]/a/text()').get()
img_hash = i.xpath('.//p//span[@class="img-hash"]/text()').get()
img_url_raw = base64.b64decode(img_hash)
img_url = 'https:' + str(img_url_raw, encoding='utf-8')
item = items.JiandanpItem(img_name=img_name, img_url=img_url)
print(item)
yield item
#next_url = response.xpath('/html/body/div/div/div/div/div/div/a/@href').get()
url = response.css('a::attr(href)').get()
print('rushang')
next_url = 'https:' + url
if next_url:
print('next_url存在, 正在下载' + next_url + '数据')
yield scrapy.Request(url=next_url, callback=self.parse)
下面的一个next_url,存在不足,就是在第一页的时候不能够找到这个标签。。(也没有报错不知道为啥)
其实重点也就是,图片链接被js文件中的函数进行加密了而已,使用到了两个函数。
在这里我们发现只需要base64库中的函数进行解码就可以
最后是保存了,在pipeline中函数如下:
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import requests
import os
class JiandanpPipeline(object):
def process_item(self, item, spider):
path = os.path.abspath('..')
save_path = path + '\\img'
if not os.path.exists(save_path):
os.mkdir(save_path)
print('文件夹创建成功!')
img_url = item['img_url']
img_name = item['img_name']
save_img = save_path + '\\' + img_name +'.jpg'
r = requests.get(img_url)
print('正在下载图片%s......' % img_name)
with open(save_img, 'wb') as f:
f.write(r.content)
f.close()
代码的可变性比较大,比如说图片的命名,保存路径等。
主要自己对煎蛋网的网页源代码摸得不太熟,希望有大佬可以不吝赐教。{:301_1004:}
值得像我这样的python萌新学习 看不懂,但是谢谢分享 看不懂,好像很厉害 妹子,妹子,我要妹子 可以,不错。一上手就用了scrapy框架。我还是看resquests,BeautifulSoup.等这些基础的语法。 (前排提醒, linux需要修改path里的'\\'{:301_978:} 这么简单,学习下 水印怎么破..... 感谢分享