Python爬虫案例——漫画网站爬取图片(模拟浏览器解析网页)

我因为做视频的需要所以想下一些漫画的图片,但是大家都知道想搞一堆jpg格式的漫画图片在正规渠道继续不太可能。所以我们就选择使用python爬取
本来我是想那某个B开头的网站开刀,但是很遗憾,他们的漫画每一页都是动态网页刷新图片,并且,从网络流翻出的图片的源文件的地址,会发现他们都被加密了(个人感觉是32位MD5加密),我们完全没办法破解并找到其中的规律。

链接实例:blob:https://manga.bilibili.com/56e70399-4d12-426d-9653-4deb43a4161d

所以我们只能放弃B站,去找一个相对小一点的网站。不过也让我找到了,虽然他同样使用AJAX技术和加密,但是好在在浏览器解析之后,他形成的动态网页能找到img的tag(哔站是canvas)这就让我们有了可乘之机,我们可以利用selenium来模拟浏览器解析网页,然后用BeautifulSoup获取需要的tag节点,以及属性,再利用request获取资源。
首先,我们需要安装这三个库

pip install requests
pip install beautifulsoup4
pip install selenium

然后需要安装你的浏览器对应的浏览器驱动
请参考:https://liushilive.github.io/github_selenium_drivers/index.html
然后需要引用库和相应的浏览器驱动

import requests
from selenium import webdriver
from bs4 import BeautifulSoup
browser = webdriver.Firefox()

我们已经有明显的思路了,接下来就是对需要爬取的网页作“个性化”处理。值得一提的是,我们平时常用的改变url的值并重新请求的方法并不太适用于这里,所以我们需要用模拟鼠标点击的方式来进入下一页查找。

i=0
const=5051362
url="https://www.u17.com/chapter/720151.html#image_id=5051362"
browser.get(url)	#请求服务器处理后的网页内容
while i<100:
    #print(browser.current_url)
    html = BeautifulSoup(browser.page_source, "lxml")	#使用bs解析网页
    con=html.find('img',class_='image_cache loading cur_img')	#获取需要的tag
    #因为获取相应的链接可能不存在所以要用一个if
    if con != None:
        img=con['src']
        #print(str(img))
        stri="./img/"+str(i)+".png"	
        response = requests.get(img)  
        with open(stri, 'wb') as fi: 
            fi.write(response.content)  	#存储图片
    else:
        #loading image_cache
        img=html.find('img',class_='loading image_cache')['src']
        #print(str(img))
        stri="./img/"+str(i)+".png"
        response = requests.get(img)  
        with open(stri, 'wb') as fi: 
            fi.write(response.content)  
    #<div id="mask"> 	第一次进入会有悬浮框,点击关掉
    if i==0:	
        mask=browser.find_element_by_id('mask')
        mask.click()	
    btn = browser.find_element_by_class_name  ('next')	#翻页
    btn.click()
    i+=1

但是这个代码在爬取这个网页的时候也是会有一个问题,就是请求的tag可能会不存在,这可能于请求时间有关,大家可以加一个sleep方法来延长一下在页面停留的时间。如果有爬虫大佬请指点一下我这个憨憨😂

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值