zoukankan      html  css  js  c++  java
  • Python爬虫示例

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # 爬取妹子图
    # url:http://www.netbian.com/meinv/
    # http://www.netbian.com/meinv/index_2.htm
    import urllib.request
    import urllib.parse
    from bs4 import BeautifulSoup
    import re
    
    
    def main():
        # 输入网址得到服务器返回的数据
        allurl()
        # 解析数据得到图片链接和图片名称
        # 保存图片到本地,图名做相应修改
    
    
    # 图片链接格式
    findImg = re.compile(r'src="(.*?)"', re.S)
    # 图片名称格式
    findName = re.compile(r"<b>(.*?)</b>", re.S)
    
    
    def findurl(url):
        """一个网页的爬取(后面用for爬取所有网页)"""
        # head伪装
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/78.0.3904.108 Safari/537.36"
        }
    
        req = urllib.request.Request(url=url, headers=headers)  # 发送信息的预处理
        response = urllib.request.urlopen(req)  # 得到整个网页
        # 读取网页并解码
        html = response.read().decode(encoding="gb18030")  # 使用'utf-8'无法解码,换为'gb18030'
        return html
    
    
    def allurl():
        """循环爬取所有网页"""
    
        for i in range(1000):
            url = "http://www.netbian.com/meinv/index_" + str(i + 2) + ".htm"
            html = findurl(url)  # 获取一个网页
            # print(html)   # 测试:是否获取到网页
    
            # 解析数据得到图片链接和图片名称
            bs = BeautifulSoup(html, "html.parser")  # 将网页解析为树形
            t_list = bs.select("li>a")  # 找到标签li中的所有子标签a,做成列表
            t_list = t_list[-17:-1]
            # print(t_list)     # 测试:当前网页所有妹子图放入列表(每页17个)
            # 对每个妹子进行正则表达式提取(链接及名称)
            for item in t_list:
                item = str(item)  # 正则表达式是对字符串操作,所以先转化为字符串
                # 提取图片名
                name = re.findall(findName, item)
                # 提取链接,并下载
                img = re.findall(findImg, item)
                savejpg(name, img)
    
    
    def imgurl(url):
        """获取图片链接下载图片"""
        # head伪装
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/78.0.3904.108 Safari/537.36"
        }
        req = urllib.request.Request(url=url, headers=headers)  # 发送信息的预处理
        response = urllib.request.urlopen(req)  # 得到图片链接
        # 二进制形式读取链接
        html = response.read()
        return html
    
    
    def savejpg(name, img):
        """得到名字和链接存储图片"""
        # print(name, img)  # 测试:输出图名及对应链接
        meizi = imgurl(img[0])  # 获取图片链接
    
        with open("D:/ImageResult/{0}.jpg".format(name[0]), "wb") as f:
            f.write(meizi)
    
    
    if __name__ == "__main__":
        # 主函数
        main()
    
    
    
  • 相关阅读:
    SQL未能排它地锁定数据库以执行该操作解决
    SQL日志文件丢失,只有MDF恢复
    ASP.Net2.0使用Log4Net(一)
    ASP.NET使用Memcached高缓存实例(初级教程)
    ASP.Net2.0使用Log4Net(二)
    Windows Server 2003域控制器的建立
    什么是SIP?
    [转].NET破解体验 ildasm.exe的使用
    Memcached深度分析(转载)
    X509证书帮助类
  • 原文地址:https://www.cnblogs.com/ezhar/p/14918111.html
Copyright © 2011-2022 走看看