写在前面
最新TIOBE编程语言排行榜,Python稳居榜首,成为最受欢迎国民度最高的编程语言。

很多同学又听说Python简单易学,不由心动,那么,Python是不是被严重高估了呢
行内程序员有话要说,其实我觉得并没有。
学习了Python其实可以做很多事情,首先可以找一份好工作!!

学了Python我们可以选的工作:
web开发工程师
人工智能工程师
数据分析师
爬虫工程师
自动化运维工程师
自动化测试工程师
当然,如果你想自己做一些有趣的事情,比如 爬一下喜欢的图片,爬某个网站,爬取音乐、爬取表情包,或者是抢火车票都可以;还可以写写小游戏;写一些有趣的小工具。
下面来展示一下爬取表情包吧!
开发工具
Python版本:3.6.4
相关模块:
🔺scrapy模块;
🔺requests模块;
🔺fake_useragent模块;
🔺以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
原理其实蛮简单的,因为之前就知道知乎有个api一直可以用:
https://www.zhihu.com/node/QuestionAnswerListV2
post请求这个链接,携带的数据格式如下:
data = {
'method': 'next',
'params': '{"url_token":%s,"page_size":%s,"offset":%s}'
}
1. url_token:
问题id,譬如问题“https://www.zhihu.com/question/302378021”的问题id为302378021
2. page_size:
每页回答的数量(知乎最大只能是10)
3. offset:
当前显示的回答的偏移量
就可以获得该问题下的所有回答啦,然后用正则表达式提取每个回答下的所有图片链接就OK了。
具体实现的时候用的scrapy,先新建一个scrapy项目:
scrapy startproject zhihuEmoji
然后在spiders文件夹下新建一个zhihuEmoji.py文件,实现我们的爬虫主程序:
'''知乎表情包爬取'''
class zhihuEmoji(scrapy.Spider):
name = 'zhihuEmoji'
allowed_domains = ['www.zhihu.com']
question_id = '302378021'
answer_url = 'https://www.zhihu.com/node/QuestionAnswerListV2'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'Accept-Encoding': 'gzip, deflate'
}
ua = UserAgent()
'''请求函数'''
def start_requests(self):
offset = -10
size = 10
while True:
offset += size
data = {
'method': 'next',
'params': '{"url_token":%s,"page_size":%s,"offset":%s}' % (self.question_id, size, offset)
}
self.headers['user-agent'] = self.ua.random
yield scrapy.FormRequest(url=self.answer_url, formdata=data, callback=self.parse, headers=self.headers)
'''解析函数'''
def parse(self, response):
# 用来保存图片
if not os.path.exists(self.question_id):
os.mkdir(self.question_id)
# 解析响应获得问题回答中的数据, 然后获取每个回答中的图片链接并下载
item = ZhihuemojiItem()
answers = eval(response.text)['msg']
imgregular = re.compile('data-original="(.*?)"', re.S)
answerregular = re.compile('data-entry-url="\\\\/question\\\\/{question_id}\\\\/answer\\\\/(.*?)"'.format(question_id=self.question_id), re.S)
for answer in answers:
item['answer_id'] = re.findall(answerregular, answer)[0]
image_url = []
for each in re.findall(imgregular, answer):
each = each.replace('\\', '')
if each.endswith('r.jpg'):
image_url.append(each)
image_url = list(set(image_url))
for each in image_url:
item['image_url'] = each
self.headers['user-agent'] = self.ua.random
self.download(requests.get(each, headers=self.headers, stream=True))
yield item
'''下载图片'''
def download(self, response):
if response.status_code == 200:
image = response.content
filepath = os.path.join(self.question_id, str(len(os.listdir(self.question_id)))+'.jpg')
with open(filepath, 'wb') as f:
f.write(image)
其中ZhihuemojiItem()用来存储我们爬取的所有图片链接和对应的回答id,具体定义如下:
class ZhihuemojiItem(scrapy.Item):
image_url = scrapy.Field()
answer_id = scrapy.Field()
OK,大功告成
效果展示
在cmd窗口运行如下命令即可:
scrapy crawl zhihuEmoji -o infos.json -t json
结语
本文用爬取表情包的案例,这是比较初级的爬虫知识,还有很多优秀的python爬虫库和框架等待后续去学习。
当然,掌握本文讲的知识点,你就已经入门python爬虫了。加油呀!
最后这里我整理了一份2022年最新版全套python资料,你想要的我都有,有需要的扫码免费领取。

1855

被折叠的 条评论
为什么被折叠?



