Ldfd 发表于 2020-8-19 22:05

多线程爬取漫画

本帖最后由 Ldfd 于 2020-8-19 23:03 编辑

先讲个笑话,程序员是怎么教孩子数数的,0,1,2,3(所以第0张就很人道)
talk is cheap, show me the code.
import requests
from lxml import etree
import re
import os
import threading


def makefolder():
    for name in NameList:
      os.makedirs('./comic/' + name, exist_ok=True)


def getsrc(url, num, sem):
    webpage = requests.get(url, headers=headers).text
    srcre = re.compile('upload/files/*/*/*.jpg')
    src = srcre.findall(webpage)
    src_new = []
    for x in src:
      x = f"https://img.yaoyaoliao.com/{x}"
      src_new.append(x)
    length = len(src_new)
    for y in range(length):
      picture = requests.get(src_new).content
      with open(f"./commic/{NameList}/第{y}张.jpg", 'wb')as pic:
            pic.write(picture)
    sem.release()
    print(f"{NameList}已经爬完")


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 '
                  'Safari/537.36 '
}
Website = 'https://m.bnmanhua.com'
html = requests.get('https://m.bnmanhua.com/comic/1163.html', headers=headers).text
xml = etree.HTML(html)
NameList = xml.xpath('/html/body/div/div/ul/li/a/text()')
UrlList = xml.xpath('/html/body/div/div/ul/li/a/@href')
UrlList_new = []
for ii in UrlList:
    ii = Website + ii
    UrlList_new.append(ii)
makefolder()
sema = threading.Semaphore(10)
for lmqz in range(len(UrlList_new)):
    sema.acquire()
    t = threading.Thread(target=getsrc, args=(UrlList_new, lmqz, sema))
    t.start()

严格符合PEP8,保证加到pycharm里是绿色对号
还有就别说那个入口了,动态语言的优势必须发挥(懒地改了*1)
欢迎大佬帮我优化优化
感谢@香谢枫林 的线程控制,解决了我分组的困扰
参考地址:https://www.52pojie.cn/thread-1117105-1-1.html
html = requests.get('https://m.bnmanhua.com/comic/1163.html', headers=headers).text
修改此处的数字换页面
这个写了有一段时间了,网站最新有些变化
图片内容有的是/upload有的是/zhang
改一下正则就能用,再加个判断就能完整下载
(我爬得是早期作品所以很简单懒得改*2)
有人需要(不可能的)就打包修改一下。
再次欢迎各路大神修改

Ldfd 发表于 2020-8-19 23:09

minibeetuaman 发表于 2020-8-19 23:07
那线程执行超时要怎么解决?

没考虑,这样下来就那一个线程一直卡着,不过爬个漫画应该不至于

Menguy 发表于 2020-8-20 00:29

慕容紫英丶 发表于 2020-8-19 22:07

谢谢分享{:1_927:}

不负韶华 发表于 2020-8-19 22:25

xpath其实不用那么啰嗦,太冗长了,

Ldfd 发表于 2020-8-19 22:28

不负韶华 发表于 2020-8-19 22:25
xpath其实不用那么啰嗦,太冗长了,

右键复制的哈哈,方便

尘封记 发表于 2020-8-19 22:54

哦看不懂

Ldfd 发表于 2020-8-19 23:05

尘封记 发表于 2020-8-19 22:54
哦看不懂

你你~忍心灌水

minibeetuaman 发表于 2020-8-19 23:07

那线程执行超时要怎么解决?

minibeetuaman 发表于 2020-8-19 23:11

可以考虑用线程池来处理

djnym 发表于 2020-8-19 23:12

大佬牛批
页: [1] 2
查看完整版本: 多线程爬取漫画