[代码与实例] 爬虫 爬ooxx图 嘿嘿

[代码与实例] 爬虫 爬ooxx图 嘿嘿闲话不多说直接撸代码importurllib.requestimporturllib.errorimportosimportsysimporthttp.serverimporthttp.clientimporttimeimportreimportrandomimportmathdata=Noneheaders={‘User-Agent’:’Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

闲话不多说 直接撸代码

import urllib.request
import urllib.error
import os
import sys
import http.server
import http.client
import time
import re
import random
import math

data = None
headers = { 
   'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'}
enctype = 'utf-8'
proxies = []
max_error_times = 5        #最多允许失败5次,否则放弃该图片下载

def create_localhost():
    number = int((math.sqrt(5)-1)/2) * len(proxies)
    for x in range(number):
        proxies.append(None)

def get_result(req_or_url,is_retrieve=False,filename = None):         #flag是否使用retrieve
    error_time = 0
    while True:
        try:
            if error_time == max_error_times:
                print('失败次数达%d次......放弃操作' % max_error_times)
                return None
            error_time += 1
            if is_retrieve:
                return urllib.request.urlretrieve(req_or_url,filename)
            else:
                return urllib.request.urlopen(req_or_url)
        except urllib.error.URLError as e:
            if hasattr(e,'code'):
                print(e.code,e.reason)
                change_proxy()
                continue
            elif hasattr(e,'reason'):
                print(e)
                change_proxy()
                continue
        except (ConnectionResetError,http.client.BadStatusLine) as e:
            print(e)
            change_proxy()
            continue
        except TimeoutError as e:
            print(e)
            print('服务器长时间无响应,自动切换代理.....')
            change_proxy()
            continue

def get_proxy():
    global data,headers,proxies
    req = urllib.request.Request('http://www.xici.net.co',None,headers)
    response = get_result(req)
    html = response.read().decode('utf-8')
    p = re.compile(r'''<tr\sclass[^>]*>\s+ <td>.+</td>\s+ <td>(.*)?</td>\s+ <td>(.*)?</td>\s+ <td>(.*)?</td>\s+ <td>(.*)?</td>\s+ <td>(.*)?</td>\s+ <td>(.*)?</td>\s+ </tr>''',re.VERBOSE)
    proxy_list = p.findall(html)
    for each_proxy in proxy_list[1:]:
        if each_proxy[4] == 'HTTP':
            proxies.append(each_proxy[0]+':'+each_proxy[1])

def change_proxy():
    proxy = random.choice(proxies)
    if proxy == None:
        proxy_support = proxy_support = urllib.request.ProxyHandler({ 
   })
    else:
        proxy_support = urllib.request.ProxyHandler({ 
   'http':proxy})
    opener = urllib.request.build_opener(proxy_support)
    opener.addheaders = [('User-Agent',headers['User-Agent'])]
    urllib.request.install_opener(opener)
    print('智能切换代理:%s' % ('本机' if proxy==None else proxy))

def get_page():         #获取最大页数
    home = 'http://jandan.net/ooxx'
    global data,headers,enctype
    req = urllib.request.Request(home,data,headers)
    response = get_result(req)
    html = response.read().decode(enctype)
    find_string = 'current-comment-page'
    find_start = html.index(find_string) + len(find_string) + 3
    find_end = html.index(']',find_start+1)
    return int(html[find_start:find_end])
test = None
def get_pic(page):      #生成器,返回一个图片链接
    global data,headers,enctype
    while True:
        url = 'http://jandan.net/ooxx/page-%d' % page
        print('当前页面:%d' % page)
        req = urllib.request.Request(url,data,headers)
        response = get_result(req)
        if response == None:
            print('获取页面失败.....')
            sys.exit()
        html = response.read().decode(enctype)
        pic = re.compile(r'<img\s+src="(http://.+?\.(?:jpg|jpeg|gif))"')
        for pic in pic.finditer(html):
            yield pic.group(1)
        time.sleep(5)
        page -= 1
        if page<1:
            break

save_path = 'D:\\图片\\妹子图'

def download():
    count = 1
    global data,headers
    for pic_url in get_pic(get_page()):         #get_page()改为页数如1000可从1000页开始下载
        file_name = os.path.split(pic_url)[1]
        if not os.path.isdir(save_path):    #目录不存在就创建
            os.makedirs(save_path)
        get_result(pic_url,True,save_path+'\\'+file_name)
        print('本次成功下载第%d个图片! %s' % (count , pic_url))
        count += 1

if __name__ == '__main__':
    get_proxy()
    create_localhost()
    download()


Jetbrains全家桶1年46,售后保障稳定

在这里还是要推荐下我自己建的 Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!
**以下内容无用,为本篇博客被搜索引擎抓取使用
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫
python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱
python 基础教程 网络爬虫 python python 爬虫经典例子
python 爬虫
(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)( ̄︶ ̄)( ̄︶ ̄)
以上内容无用,为本篇博客被搜索引擎抓取使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通用权限管理组件

    通用权限管理组件

     
     
    整体数字化建设项目
    QQ群:42706992一起学习
    ASP.NETC#.NET
    通用权限管理组件
    使用说明书
     
     

     
     
     
     
     
     
                      开发单位:技术研发部
                编制日期:2010年10月
     

    2022年6月16日
    26
  • navcat15.0激活码【最新永久激活】

    (navcat15.0激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月31日
    202
  • C++二维vector初始化

    C++二维vector初始化初始化一个二维vector,行M,列N(行列数确定且含有初始值)://初始化一个二维的matrix,行M,列N,且值为0vector<vector<int>>matrix(M,vector<int>(N));//等价于下面的vector<vector<int>>matrix(M);for(inti=0;i<M;i++){matrix[i].resize(N);}//等价于下面的vector&l

    2022年9月17日
    3
  • HTML实用的网页代码大全[通俗易懂]

    HTML实用的网页代码大全[通俗易懂]【一】:符号&lt;p&gt;段落&lt;/p&gt; &lt;h&gt;标题&lt;/h&gt;(h1—h6) &lt;br&gt;:换行 &lt;hr&gt;:分割线 左右尖括号:&amp;lt;&amp;gt; &amp;表示为:&amp;amp "表示为:&amp;quot; 表格形式&lt;table&gt;

    2022年6月3日
    58
  • CSS设置超链接样式常用

    CSS设置超链接样式常用伪类名称 含义 示例 a:link 未单击访问时超链接样式 a:link{color:#9ef5f9;} a:visited 单击访问后超链接样式 a:visited{color:#333;} a:hover 鼠标悬浮其上的超链接样式 a:hover{color:#…

    2022年7月19日
    13
  • c语言与java哪个更好_c语言和java哪个好?[通俗易懂]

    c语言与java哪个更好_c语言和java哪个好?[通俗易懂]看到这个问题,一定要参与一下,这两个语言我都太熟悉了,也用了很长时间。关于程序设计语言,有这么两句话:C语言,神一样的语言。java语言是一个神话。所以说这是两个神级语言,到底哪个好?下面咱们逐个分析一下:1。C语言,C语言是计算机程序设计语言史上具有划时代意义的语言,到今天为止也依然是主力语言。最新的2017年语言排行榜以微弱的差距排在第二位,远远高于榜单中其他语言的使用率,而且C语言的一众小弟…

    2022年7月9日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号