作者:xiaoyu

微信公众号:Python数据科学

知乎:Python数据分析师

<10>

海贼王已经10年了,一路陪伴了我们的点点滴滴。它热血,激情,感人,欢乐,吸引了无数男女老少的紧紧跟随。

说起来还真有点小心酸,原谅博主也是个海贼迷,心中怀揣着很大的梦想,誓死也要成为海贼王的男人。

但如今梦想已经破灭了,因为博主有了女朋友...

什么?说我是假粉丝,我上去就给你一巴掌!看到最后你就知道什么叫真粉儿!!

好了,收!

爬取目标

说说我们的正题,前面两篇爬虫学习介绍了正则和BeautifulSoup的内容,这里其实是想借着这个机会给大家分享一下正则和BeautifulSoup解析的实战例子。

目标实现比较简单,就是下载xxx网站上海贼王动漫的套图。爬取效果如下:

(截取了部分下载过程)

(部分下载图片)

采取了多线程爬取,总共1000多张,都存在本地了。

功能分析

本篇目的是使用正则+BeautifulSoup,因此后面不更多赘述了。

提取系列链接

通过开发者工具看到,所有的系列都是同一级别的节点,那么我们首先应该做的是遍历所有页码,然后提取每页各个系列的链接。

接下来看看链接在哪。

小提示:红框内第一个是鼠标自动跟随,第二个是手机/PC切换,使用起来非常方便。

具体点开其中一个系列标签一看,我们要的链接正是标签下的href属性,但是你会发现有两个一模一样的href属性,链接也一样,而我们只需要一个,这就需要小处理一下了,提供两个思路:

使用BeautifulSoup方法单独提炼出一个链接

两个链接都提炼出来,放进set集合中去重

这里博主用的第一种方法。

提取系图片链接

同样的过程,图片的链接在

标签下的子节点的src属性里,依然使用BeautifulSoup就可轻松解决。

但是这里的网页排版有个问题,就是有的系列中多组图在一页中,而有的系列每页只有一张图,需要翻页查看。

解决方法是不管有没有翻页,都直接遍历该系列下的所有页,通过返回的状态码来判断下一步动作。

好了,解析的任务的分析差不多完成了,下面看看具体代码如何实现的。

代码实现

下载系列链接:

def html_parse(self, num):

try:

url_make = self.url.format(num)

html = requests.get(url_make, timeout=10)

soup = BeautifulSoup(html.content, 'lxml')

ul_tag = soup.find_all('ul', class_='spic pic1')

soup1 = BeautifulSoup(str(ul_tag[0]), 'lxml')

for counter, li_tag in enumerate(soup1.find_all('li')):

soup2 = BeautifulSoup(str(li_tag), 'lxml')

a_tag = soup2.find_all('a')

href_list = re.findall(re.compile('href="(.+?)"'), str(a_tag))

if len(href_list) != 0:

print('第 ' + str(num) + ' 页: ----第 ' + str(counter + 1)

+ '个链接:' + href_list[0] + ' ----')

self.q.put(href_list[0])

sleep(random.randint(2, 3))

except requests.ConnectionError:

pass

下载图片链接:

def picture_parse(self):

try:

sub_url = self.q.get()

sub_url_base = sub_url[:-6]

for page in range(1, 10):

sub_url_new = sub_url_base + '_' + str(page) + '.shtml'

html2 = requests.get(sub_url_new)

if html2.status_code == 200:

soup = BeautifulSoup(html2.content, 'lxml')

div_tag = soup.find_all('div', id='pictureContent')

soup1 = BeautifulSoup(str(div_tag[0]), 'lxml')

for img_tag in soup1.find_all('img', src=re.compile('.+?')):

soup3 = BeautifulSoup(str(img_tag), 'lxml')

if soup3.img['src'] is not None:

self.picture_link.append(soup3.img['src'])

print(str('----' + soup3.img['alt']) + '链接 : '

+ str(soup3.img['src']) + ' ----')

sleep(random.randint(2, 3))

else:

pass

except requests.ConnectionError:

pass

下载并储存图片到本地:

def picture_store(self):

try:

for num, link in enumerate(set(self.picture_link)):

html3 = requests.get(link)

picture_path = 'D:\Pictures_Downloaded\\' + 'pic' + str(num+1) + '.jpg'

with open(picture_path, 'wb') as f:

f.write(html3.content)

except requests.ConnectionError:

pass

多线程队列任务:

def main(self):

page_num = 2

threads_0 = []

for i in range(1, page_num):

t = Thread(target=self.html_parse, args=(i,), name='Thread-0')

threads_0.append(t)

for i in range(len(threads_0)):

threads_0[i].start()

for i in range(len(threads_0)):

threads_0[i].join()

threads_1 = []

for i in range(self.q.qsize()):

t1 = Thread(target=self.picture_parse, args=(), name='Thread-1')

threads_1.append(t1)

for i in range(len(threads_1)):

threads_1[i].start()

for i in range(len(threads_1)):

threads_1[i].join()

self.picture_store()

注:爬取间隔可以适当再长点,减轻目标服务器的负担,也理解一下辛苦的运维工作人员。

代码比较简单,目的是在实战中掌握正则和BeautifulSoup解析方法,欢迎大家指点和讨论。

作品展示

这部分是为了兑现铁粉儿的承诺,不感兴趣可忽略。

博主库爱画画,素描,水彩,国画都学过点,当然这个是在wacom绘画板上,利用corel painter + photoshop完成的。由于热爱海贼王动漫,闲暇时间画了个各种海贼绘画。

以下是几张索隆桑的绘图(无水印),感兴趣的朋友可以收藏:)

关注微信公众号Python数据科学,获取 120G 人工智能 学习资料。

python绘画海贼王_Python爬虫实战之(三)| 一个海贼迷的呐喊相关推荐

  1. python百度云盘采集_Python爬虫实战:抓取并保存百度云资源(附代码)!

    寻找并分析百度云的转存api 首先你得有一个百度云盘的账号,然后登录,用浏览器(这里用火狐浏览器做示范)打开一个分享链接.F12打开控制台进行抓包.手动进行转存操作:全选文件->保存到网盘-&g ...

  2. python 爬手机号_Python爬虫实战笔记_2-2 爬取手机号

    练习两层工作流 第一步,获取目标url存入数据库(mongoconn.py ) 第二步,从数据库中读出url, 并从页面上提取目标信息(homework2_2.py ) 源代码 mongoconn.p ...

  3. python网络爬虫_Python爬虫实战之网络小说

    今天和大家分享的是python爬虫实战,由于本人最近迷上了看网络小说,学生党又穷,只能看看网络dao版小说,现在这类dao版小说网站可以说非常的多,但是所有的网站进去都可以看见一大把的广告信息,非常影 ...

  4. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...

    本文主要向大家介绍了Python爬虫实战的爬虫框架Scrapy的第一个爬虫示例入门教程,通过具体的内容向大家展现,希望对大家学习Python爬虫实战有所帮助. 我们使用dmoz.org这个网站来作为小 ...

  5. python爬网易新闻_Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧

    Python爬虫实战教程:爬取网易新闻:爬虫精选 高手技巧 发布时间:2020-02-21 17:42:43 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有, ...

  6. python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片

    随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...

  7. python爬虫抓取房产_Python爬虫实战(3):安居客房产经纪人信息采集

    1, 引言 Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫.为了使用各种应用场景,该项目的整个网络爬虫产品线包含了四类产品,如下图所示: 本实战是上图中的&q ...

  8. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

  9. python海贼王_Python爬虫之一个海贼迷的呐喊

    <10> 海贼王已经10年了,一路陪伴了我们的点点滴滴.它热血,激情,感人,欢乐,吸引了无数男女老少的紧紧跟随. 说起来还真有点小心酸,原谅博主也是个海贼迷,心中怀揣着很大的梦想,誓死也要 ...

最新文章

  1. linux常用运维工具uptime、iostat、vmstat、sar
  2. K8S部署工具:KubeOperator集群规划-自动模式
  3. Linux永久挂载新的硬盘
  4. BZOJ 1800: [Ahoi2009]fly 飞行棋( 枚举 )
  5. centos下搭建网站服务器,Centos7搭建web服务器
  6. LeetCode 1374. 生成每种字符都是奇数个的字符串
  7. python的人工智能和c++的有什么区别_为什么人工智能岗位有些招聘C/C 有些招聘Python到底哪门编程语言更重要(恰恰相反C++在人工智能方面的用处很大)...
  8. Linux的一些简单的常用命令
  9. 一个server搭建多个tomcat的时候session混乱情况及解决
  10. 程序员该如何合理安排时间呢?
  11. 1.5编程基础之循环控制_16买房子
  12. mysql数据库权限传递,mysql数据库权限分配-参考
  13. 在计算机rwn代表,基于改进和RWn-SVM的化工过程故障快速诊断.pdf
  14. 双系统win+ubuntu14.04使用360随身wifi 3代
  15. 免费图片库网站推荐(国外高清可商用)
  16. 修真院教学模式三大阶段之真实项目
  17. MAC设置L2TP连接公司内部网络
  18. python 维基百科爬虫_如何使用Python提取维基百科数据
  19. Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题
  20. water sensor水位传感器

热门文章

  1. mapbox-gl添加threejs飞线
  2. 三星s8怎么分屏操作_双屏互动,大有可为 三星Galaxy Z Fold2 5G的魅力折叠体验
  3. 各种框架性能分析,和语言性能分析
  4. Matlab学习笔记9.3:Matlab之神经网络模型
  5. 基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程
  6. '\xF0\x9F\x98\x82\xF0\x9F...'报错处理
  7. 个人所得税法应充分体现经济法原则
  8. 云桌面VOI计算存储在服务器端,介绍三种云桌面:VDI、IDV、VOI
  9. 迅雷9屏蔽所有游览器和网站相应
  10. 电脑任务栏突然变得很宽很大