利用lxml爬取煎蛋妹子所有图片

利用lxml爬取煎蛋妹子所有图片

大家好,又见面了,我是你们的朋友全栈君。

这个爬虫是单线程,因为在多线程的情况下,请求容易被煎蛋搞掉,而且还要sleep(1)不然速度过快也会被干掉,然而即使是这样也不能全部爬取,当然,我用的headers只有一个useragent,有心的可以多弄几个每次请求都随即取就好了 上代码

import urllib
import urllib2
from lxml import html
import os
import time

def getTree(pageUrl):
    #这里可以用多个useragent随机,比较不容易被干掉
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
    myHeaders = {
   
   'User-Agent': user_agent}
    req = urllib2.Request(pageUrl,headers=myHeaders)
    page_content = urllib2.urlopen(req).read()
    tree = html.fromstring(page_content)
    return tree

#获取当前页面的后面页面的URL
def getAllUrls(n_tree):
    url_arr = n_tree.xpath('//div[@class="comments"]/div[@class="cp-pagenavi"]/a/@href')
    return url_arr

#通过图片链接下载图片
def downLoadPic(picUrl,count):
    string = picUrl[-3:]
    if string == 'jpg':
        urllib.urlretrieve(picUrl,'f:\\picFile\\'+str(count)+'.jpg')
        time.sleep(1)
    # else:
        #gif图
        # urllib.urlretrieve(picUrl,'f:\\picFile\\'+str(count)+'.gif')

#获取当前页面的所有图片链接
def getAllPicUrls(m_tree):
    mylist = []
    pic_arr = m_tree.xpath('//div[@class="row"]/div[@class="text"]/p/img/@src')
    for e in pic_arr:
        e = 'http:'+e
        mylist.append(e)            
    return mylist

if __name__ == '__main__':
    mytree = getTree('http://jandan.net/ooxx')
    pic_arr = getAllPicUrls(mytree)
    count = 0 
    os.mkdir('f:\\picFile\\')
    for e in pic_arr:
        count = count+1
        downLoadPic(e,count)
    afterList = getAllUrls(mytree)
    afterPageUrl = afterList[0]
    while afterPageUrl> 0:
        newTree = getTree(afterPageUrl)
        newPicArr = getAllPicUrls(newTree)
        for a in newPicArr:
            count = count + 1
            downLoadPic(a,count)
        newList = getAllUrls(newTree)
        afterPageUrl = newList[2]
        print '------->'+afterPageUrl
复制代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年4月2日 下午6:00
下一篇 2022年4月2日 下午6:00


相关推荐

  • 2021年软件测试工具总结——单元测试工具

    2021年软件测试工具总结——单元测试工具在应用程序中 单元是具有一个或多个输入和单个输出的软件中最小可测试部分 单元测试是一种测试软件代码单元的方法 通常包括一个或两个输入 产生一个输出 单元测试主要关注独立模块的功能正确性 目的是确保每个单元都按照预期的方式运行 要进行单元测试 开发人员需要编写测试代码 单元测试有手动和自动化测试两种类型 自动化通常是首选的方法 可以为开发人员节省大量的时间和精力 单元测试是自动化测试金字塔模型中占比最大的测试类型 做好单元测试对于保证软件产品的质量非常重要 单元测试可以 及早发现软件中的缺陷并

    2026年3月20日
    1
  • linux chmod 777 r,chmod -R 777 的3种补救办法,附有linux chmod命令语法和结构详解

    linux chmod 777 r,chmod -R 777 的3种补救办法,附有linux chmod命令语法和结构详解有很多新手误操作 chmod R777 导致系统中的大部分服务以及命令无法正常使用 新睿云为大家整理了 3 种 chmod R777 的补救办法 还有 linuxchmod 命令的详解 chmod 命令可以改变权限目录和文件权限 R 是目录下所有文件 777 是高权限 读 写 执行 chmod R777 意思就是将当前目录及目录下所有文件都给予 777 权限这个在服务器里不能随便敲的 不能在根目录下进

    2026年3月17日
    2
  • Html5 视频(html文件怎么打开)

    video元素支持3种视频格式格式IE9+FirefoxOperaChromeSafariOggNo3.5+10.5+5.0+NoMPEG49.0+NoNo5.0+3.0+WebMNo4.0+10.6+6.0+NoOgg=带有Theora视频编码和Vorbis音频…

    2022年4月15日
    61
  • QQ群关系数据库处理

    QQ群关系数据库处理1.附加数据库1EXECsp_attach_single_file_db@dbname='GroupData1_Data',@physname='/media/

    2022年7月3日
    30
  • 圆柱体积计算公式是_锥形体积公式

    圆柱体积计算公式是_锥形体积公式圆柱体积计算公式有哪些π是圆周率,一般取3.14r是圆柱底面半径h为圆柱的高圆柱体体积=底面积×高V=πr2h=V=sh还可以是v=1/2ch×r侧面积的一半×半径2圆柱体积相关公式圆柱的侧面积=底面圆的周长×高圆柱的表面积=上下底面面积+侧面积圆柱的体积=底面积×高3圆柱的体积怎么计算求圆柱体积先要求圆基的半径。两个圆都会做,因为它们大小相同。如果你已经知道半径,你可以继续前进。如果你不知道半径…

    2026年1月28日
    4
  • springboot介绍一下_SpringBoot打包

    springboot介绍一下_SpringBoot打包一、SpringBoot和SpringMVC的关系SpringBoot是SpringMVC的升级版SpringBoot的特点:化繁为简,简化配置微服务->SpringCloud->SpringBoot二、前置知识利用maven构建项目Spring注解RESTfulAPI

    2026年2月19日
    7

发表回复

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

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