python外国网站爬虫_Python爬取某境外网站漫画,心血来潮,爬之

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

转载地址

https://blog.csdn.net/fei347795790?t=1

某年某月某日,重温某本漫画,心血来潮,爬之!!!

分析思路:

1. 通过静态爬取漫画所有章节的url链接信息以及集数信息。

2. 通过动态爬取每集漫画的所有篇幅。

3. 每集漫画保存至相应本地文件夹中。

一、获取所有漫画信息

通过对漫画网页地址load = "http://x.seeym.net/xxxx/xxxxxxxx/"分析,每集漫画 的链接和集数集中于某个标签中,通过requests库和BeautifulSoup库获取该标签信息。并转化成pd.DataFrame格式数据,共包含三列ID(集数),url(漫画链接),name(集名)。.

import os

import numpy as npimport pandas as pdimport requestsimport reimport timefrom bs4 import BeautifulSoup

from selenium import webdriver

#载入漫画链接,返回DataFrame文件,包含ID,URL链接,文件名.def url(load): try: bb = requests.get(load, timeout = 30)

bb.encoding = bb.apparent_encoding soup = BeautifulSoup(bb.text,'lxml')

div = soup.find(id = 'mh-chapter-list-ol-0')

url = [] name = [] for i in div.find_all("a"):

url.append("http://m.seeym.net" + i.attrs["href"])

b = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])","",i.string)

name.append(b)

ID = np.array(list(reversed(range(len(url))))).reshape(len(url),1) + 1

url = np.array(url).reshape(len(url),1)

name = np.array(name).reshape(len(url),1)

info = pd.DataFrame(np.concatenate((ID,url,name),axis=1),columns=["ID","url","name"])

info["ID"] = info["ID"].apply(pd.to_numeric)

info = info.sort_values(by = "ID")

return info

except: print("网页不可用")

二、下载漫画

url链接分析:具体漫画信息隐藏在动态链接中,通过selenium爬取图片信息和漫画图片数,每张图片的url链接为http://xxxxxx.html?p=i,i为漫画图片数。第一步,获得该集漫画图片总数。第二步,循环爬取漫画图片。第三步,下载保存。

#提取漫画内容load:载入漫画网址,path:保存地址,dic:保存集数

def jpg(load,path,dic,browser,ID):

a = 1

try: browser.get(load)

elemt = browser.find_element_by_id("k_total")

total = elemt.text for i in range(1,int(total)+1):

load1 = load + '?p=' + str(i)

browser.get(load1) elemt = browser.find_element_by_id("qTcms_pic")

bb1 = elemt.get_attribute('src')

bb2 = requests.get(bb1, timeout = 30)

bb2.encoding = bb2.apparent_encoding path1 = path + '/' + str(ID) + '_' + dic + '/' + str(i) + '.jpg'

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

f.write(bb2.content)

time.sleep(np.random.randint(1,3))

print('xxxxxx{}下载成功'.format(dic))

return a - 1

except: print('xxxxxx{}下载失败'.format(dic))

return a

代码修改:下载过程中出现漫画集名有特殊字符的情况,通过正则表达式将特殊字符剔除。

三、新建保存文件夹和删除文件夹

更新漫画操作,若本地文件夹中无该漫画集数子文件夹,则创建文件夹。若有,则不创建。删除下载失败的文件夹,若不能下载完整漫画集,则删除创建的文件夹。

#新建文件夹

def mkdir(path,dic,ID):

path = path + '/' + str(ID) + '_' + dic

check = 1

if os.path.exists(path) == False:

print('创建{}文件夹'.format(dic))

os.mkdir(path)

return check - 1

else:

return check

#删除文件夹,文件def deldir(path,dic,ID):

path = path + '/' + str(ID) + '_' + dic

if os.path.exists(path) == True:

for i in os.listdir(path):

path1 = path + '/' + i

os.remove(path1)

os.rmdir(path)

else:

pass

四、拼接代码

下载流程:

1. 输入load链接,本地地址,运行webdriver.Chrome谷歌浏览器。

2. 获取漫画url信息。

3. 循环下载漫画,生成下载失败文件fail。

4. 新建子文件下,下载漫画,并time.sleep(np.random.randint(x))模拟人看漫画时长。

def main():

#第一步:载入xxxxx网址和保存漫画地址 browser = webdriver.Chrome(executable_path = "D:/chromedriver.exe")

load = "http://xxxxx.net/xxxx/xxxxx/"

path = "F:/漫画/xxxxx"

#第二步,获取所有漫画的url信息 info = url(load)

#第三步,下载漫画 fail = info.iloc[0:1,:]

for i in range(len(info)):

http = info.iloc[i,1]

dic = info.iloc[i,2]

ID = info.iloc[i,0]

check = mkdir(path,dic,ID)

if check == 0:

a = jpg(http,path,dic,browser,ID)

if a == 1:

fail = pd.concat((fail,info.iloc[i:i+1,:]))

deldir(path,dic,ID)

else:

time.sleep(np.random.randint(3,6))

continue else:

continue return fail

fail = main()

五、结果

PS:网址来源于某盗版网址,图文中相关链接等信息均隐藏。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值