meizi 图会爬么?不会那我教你好了
声明:本文由一位知名的不知名 Payne 原创,转载请注明出处!后优化代码为 52 讲轻松搞定网络爬虫第一次实战课程为本节代码思路为基础,后自作聪明,书写。 本章节源码仓库为:https://github.com/Payne-Wu/PythonScrape 写在最前面:本章适用于新手小白,代码规范化思路。 一言不合直接上代码!具体教程及思路总代码后! 所用解释器为 Python3.7.1,编辑器为 Pycharm 2018.3.5. 本着虚心求学,孜孜不倦,逼逼赖赖来这里虚心求学,孜孜不倦,逼逼赖赖,不喜勿喷,嘴下手下脚下都留情。
基础源码(我刚自学 Python 时候写的代码)
要爬就爬全站的,一两张一两个还不如另存为来的更加实际。啊哈哈哈
- 那咱们先来说说 Meizitu 的基本思路:
个人总结(四步法):发送请求, 得到响应, 解析数据, 保存数据(比较宏观的概念)
- 众所周知啊(其实是个人理解):爬虫本质为模拟浏览器发送请求 ,倒推过来思考 既然是模拟请求,请求地址 (URI) 总得晓得吧。那么本次请求的 URI 为以下(单个图册):
- MAIN_URL:https://www.mzitu.com/
- Atlas URL:https://www.mzitu.com/226469
- Specific URL: https://www.mzitu.com/226469/1
-
模拟请求,既然是模拟请求怎么也得,模拟一下吧?被站长大大晓得了那不就被关在门外了。(站长 “菇凉” 说:“我家是给帅气的小哥哥用户访问的,你个程序来凑一凑不太好吧?” 在我脑壳后面敲了敲,后就把我拒之门外,头也不会,扬长而去)经过我苦思冥想,仿佛得到了前所未有的启发,要不我们走走后门,让这个程序做个人?如此甚好。妙哉,妙哉。。。
- 请求头一带谁都不爱。大叫一声还有谁,于是我就上啊。然而结果确实如此
-
```
url = ‘https://www.mzitu.com/‘
header =
{
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0”
}response = requests.get (url, headers=header) # 请求网页
print(response)1
2
3
4
5
6
7
8
9
reponse<200>
* 经过我请求,他回应,他回应了爱你你(200),最后咱们握手了。菇凉,咱们还不够了解。需要多了解了解。我还没有成为无敌的男ying,我得多学习学习,争取早日娶你过门。(论一个渣男的锻炼与养成)
* 好不容易进来了,本着虚心求教,好好学习,天天向上,不谈儿女私情的我,怎么也得有所收获吧。这是???渣男的修炼养成计划?这是宝贝啊!!!我得看看,学习学习。
* [gallery size="full" columns="1" ids="9144"]
* 这还上锁啦?,这个可不香了。经过研究,一笑 你有你的的张良计,我有我的万能钥匙,Refer钥匙。配置Refer。走着。还不乖乖的。小意思啦。。。。就这样。
* [gallery size="full" columns="1" ids="9145"]
虽然不是用的同一张图片,BUT,有无图片是这Refer防盗链作祟的。 **ok,nice。** 各位看官,到这儿咱们也得进入真正的 说了这么多,让我们进入造的环节把,基础四步走,发起请求,得到响应,解析数据,保存!打完收工。 首先咱们是定义了一个自定义的用户代理,优点稳定、简单易于操作,但缺点是比较繁琐。 为什么不用from fake_useragent import UserAgent 这个主要还是因为这个模块不大稳定,我用的时候经常出错。不晓得是不是我。。。 至少我用的不太爽。而且既然自己阔以造轮子,为何不试着造一造呢? 说说User-Agent构造思路,首先是定义了一个User-Agent列表,然后从里面随机取一,作为相对本次User—Agent。 优化后的代码是直接定义了一个请求函数,这样如果需要请求是阔以直接调用这个函数,避免代码臃肿。无脑写requests。既不提升效率,也不简洁。还看着懵。有好的自然就要给好的,有时候对自己得好点。 注意请不要忽略异常捕获哦,这样会使咱们的爬虫小伙计更加健壮。爬虫的Strong在于考虑细致,全方面。这样成为一只成年的爬虫,虽然我也不晓得谁说的,我感觉还是蛮有道理的,如果真的没有人说,那就是我吧。。。。 这里是直接定义了一个请求方法,方便需要请求的时候直接调用。即可获得请求的效果def scrape_page(url):
logging.info(‘scraping %s…’, url)header = User_Agent(page)
print(header)
try:
response = requests.get(url, headers=header)
return response.text
except TimeoutError as a:
logging.error(f”Error time is Out:{a}”)
except ReadTimeout as b:
logging.error(f”Error ReadTimeout: {b}”)
except HTTPError as c:
logging.error(f”Error HTTPError: {c}”)
except ConnectionError as d:
logging.error(f”Error ConnectionError: {d}”)1
2def scrape_index(page):
index_url = f”{BASE_URL}/page/{page}/“
return scrape_page(index_url)
2.1 解析数据(获得图册的 URN)
def parseindex(html):
doc = pq(html)
links = doc(‘.postlist #pins > li > span:nth-child(2) > a’)
for link in links.items():
detailurl = link.attr(‘href’)
logging.info(‘Got detailurl %s’, detailurl)
yield detail_url
def scrape_detail(url):
return scrape_page(url)
1 |
|
if __name == ‘__main
1 |
|
TOTAL_PAGE 为所爬取页数
if name == ‘main‘:
pool = multiprocessing.Pool()
pages = range(1, TOTAL_PAGE + 1)
pool.map(main, pages)
pool.close()
```
写到最后: 能看到这里,我相信你是非常想学的,单单看到这里是不可能学会的了,那么如果要去做,阔以尝试着与本章源码一起阅读。希望你能有所收获。 如果想要更好的运用到实际生活中,以爬虫为兴趣,以此为工作。阔以学习崔老师的 52 讲轻松搞定网络爬虫。祝生活愉快,完事顺心。期待我们下次见面 有问题,有疑问,欢迎在评论区留言,我将知无言,言无不尽。评论区期待你的出现 -Payne
文章来源: cuiqingcai.com,作者:Payne,版权归原作者所有,如需转载,请联系作者。
原文链接:cuiqingcai.com/9142.html