Python入门教程!超简单:多线程调用HTTP代理ip技术批量爬取1080P妹子图

Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python语法简洁清晰。学好爬虫技能,可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。

【Python实战】效率提升!超简单:多线程调用HTTP代理ip技术批量爬取小姐姐美图

环境准备

  • requests:通过http请求获取页面
  • lxml:是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
  • Beautiful Soup4:可以从HTML或XML文件中提取数据
    在终端中分别输入以下pip命令,安装它们
python -m pip install beautifulsoup4
python -m pip install lxml
python -m pip install requests

实现思路

利用 Python 的 urllib 模块获取网页的全部内容
利用 Python 的 re 模块进行网页正则分析,找到目标壁纸
利用 Python 的 urllib 模块进行壁纸下载,保存至某一特定文件夹
将该文件夹设置成壁纸,可以实现系统壁纸每天自动更新

提取HTTP代理IP

  • 自定义选择提取格式,ip数量,支持协议、端口等参数
    Python入门教程!超简单:多线程调用HTTP代理ip技术批量爬取1080P妹子图_第1张图片
  • 生成API链接,调用HTTP GET请求即可返回所需的IP结果* 可以直接按照以下格式组装所需的API
    Python入门教程!超简单:多线程调用HTTP代理ip技术批量爬取1080P妹子图_第2张图片

代码实现

# 定位到 1920 1080 分辨率图片
def handleImgs(links, path):
    for link in links:
        href = link.get('href')
        if(href == 'http://pic.netbian.com/'): # 过滤图片广告
            continue

        # 第一次跳转
        if('http://' in href): # 有极个别图片不提供正确的相对地址
            url = href
        else:
            url = index + href
        select = 'div#main div.endpage div.pic div.pic-down a'
        link = screen(url, select)
        if(link == []):
            print(url + ' 无此图片,爬取失败')
            continue
        href = link[0].get('href')

        # 第二次跳转
        url = index + href

        # 获取到图片了
        select = 'div#main table a img'
        link = screen(url, select)
        if(link == []):
            print(url + " 该图片需要登录才能爬取,爬取失败")
            continue
        name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('<', '').replace('>', '')
        print(name) # 输出下载图片的文件名
        src = link[0].get('src')
        if(requests.get(src).status_code == 404):
            print(url + ' 该图片下载链接404,爬取失败')
            print()
            continue
        print()
        download(src, name, path)
        time.sleep(interval)
# 下载操作
def download(src, name, path):
    if(isinstance(src, str)):
        response = requests.get(src)
        path = path + '/' + name + '.jpg'
        while(os.path.exists(path)): # 若文件名重复
            path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
        with open(path,'wb') as pic:
            for chunk in response.iter_content(128):
                pic.write(chunk)

你可能感兴趣的:(Python,代理ip教程,代理服务器,Python入门,网络代理,HTTP代理ip,高匿ip,多线程)