zoukankan      html  css  js  c++  java
  • 编了一套爬虫美女图的一组代码,请大神指点一二;

    # -*- coding: utf-8 -*-
    #coding=utf-8
    #_author_='Lucky';
    #date: 2018/12/19
    import os
    import re
    import requests
    from lxml import etree
    from bs4 import BeautifulSoup

    def get_main():#定义最外层的函数

    for result in range(200):#因为目录有175页,所以定义这个区间
    if result ==0:
    url = f"http://www.mm131.com/xinggan"
    else:
    url = f"http://www.mm131.com/xinggan/list_6_{result}.html"#发现规律地址都是后面加_数字
    res = requests.get(url)#请求上面网址返回给变量res
    print(res)
    res.encoding = res.apparent_encoding # 将变量进行编码转换 没有实际意义
    soup = BeautifulSoup(res.text, "lxml") # 解析后的内容给soup对象
    tr_soup = soup.find_all("dd")#发现目录主图都是在dd标签下面
    # print(tr_soup)
    get_url(tr_soup,result)#调用下面的函数 传的参数是上面筛选出来的 dd标签中的内容

    def get_url(defaul,res):#目录中的二层url地址生成
    for i in defaul:
    if i.find("a"):#查找a标签下的所有内容
    text = i.get_text()#如果找到就提取文本到前面变量
    print(text)
    link = i.find("a").get("href")#将标签a下面href的值url单独给变量link列表
    print(link)
    if 'html' in link:#尤其注意这里,为了防止爬到的地址不存在html字符串,(也就是说爬的地址不是图片url地址)加次条件
    link_re = '/.+?.' # 先定义个正则表达式,为了后面做url拼接使用,实际是找出这个表达式的值
    end_link = re.compile(link_re) # 编译上面的表达式后才能被python识别
    end_url = re.findall(end_link, link) # 找出link中符合正则表达的内容
    print('end_url=', end_url)
    new = end_url[1].strip('.') # end_url[1]的值中有个.在拼接url时无法拼接,故用strip删除

    for num in range(2, 55): # 每个目录下基本上都是存在55个子图片,故用区间
    end2_link = new + '_%d' % num # 字符串拼接
    web = ('http://www.mm131.com' + end2_link + '.html') # 形成要访问的url
    print(web)
    get_endurl(web, num, text)

    def get_endurl(web, no, text):#末端请求Url和图片保存写入
    headers = {
    'Referer': f'{web}',
    'User-Agent': 'Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }#请求头

    res = requests.get(web)#访问对应Url,返回信息到res
    result = etree.HTML(res.content)#通过etree.HTML的函数讲res进行解析,这样才能通过xpath来找到图片
    # print(etree.tostring(result).decode("utf-8"))
    img_list = result.xpath("//div[@class='content-pic']/a/img/@src")#将所有@src图片地址放到列表中
    print(img_list)
    for img in img_list:#遍历上面的列表
    rimage = requests.get(img, headers=headers)#将每次遍历到的图片src,返回给rimage
    with open(f'img2/{text}_{no}.jpg', 'wb') as f:#打开Img文件夹保存定义的文件名,
    f.write(rimage.content)

    if __name__ == '__main__':
    get_main()
  • 相关阅读:
    前端二维码生成方式
    svn 本地仓库使用
    layer.open实现图片预览
    基于FreethEarh框架开发的3D综合态势系统
    Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)【转】
    Cesium中DrawCommand使用【转】
    Cesium案例解析(三)——Camera相机[转]
    Cesium.knockout【转】
    Java堆和栈的区别
    Kafka Eagle安装详情及问题解答
  • 原文地址:https://www.cnblogs.com/pytest/p/10218486.html
Copyright © 2011-2022 走看看