利用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?

    mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?一个表,1.5w条数据,字段:id,name,content,last_update_timeid,自定义主键name,varchar类型content是longtext类型,last_update_time为datetime类型,不为空content当中是文本和代码等,平均长度在20k+。case1:selectid,namefromtorderbylast_update_tim…

    2022年5月14日
    46
  • 在线检测笔记本电脑屏幕坏点

    新买了台电脑,装的linux.不知道怎么测试屏幕坏点.后来看到可以在线查看有没有坏点.链接地址记下来.给需要的朋友http://www.biyouti.com/tool/index.htm 转载于:https://blog.51cto.com/hebsun/1036768…

    2022年4月7日
    122
  • 游戏php是什么文件夹,ldsgamemaster是什么文件夹

    游戏php是什么文件夹,ldsgamemaster是什么文件夹ldsgamemaster是鲁大师的游戏大师源文件;而源文件就业是用汇编语言或高级语言,写出来的代码保存为文件后的结果,目标文件是指源文件经过编译程序产生的,能被cpu直接识别的二进制文件。本教程操作环境:Windows7系统,鲁大师6.1021.3070.205版本,DellG3电脑。ldsgamemaster是鲁大师的游戏大师源文件。源文件是用汇编语言或高级语言,写出来的代码保存为文件后的…

    2022年6月12日
    50
  • SSL协议概述和握手过程

    SSL协议概述和握手过程SSL协议主要是为了保证WEB通信的安全性,是基于TCP协议的SSL协议有三个特性:1.机密性SSL协议的机密性主要依靠的是对称加密体质,在通信过程中,使用对称密码进行加密解密保证信息的安全性。2.完整性SSL协议的完整性主要依靠的是散列技术,对分组数据进行压缩之后,利用散列函数获得哈希值,加在分组信息的尾部,并且利用对称密码进行加密之后再传输(在传输到TCP层之前还有一个动作

    2022年5月25日
    42
  • server2003怎么进入安全模式_windows2003server

    server2003怎么进入安全模式_windows2003serverWINDOWS SERVER 2003 上出现 超过响应缓冲区限制 错误,如何解决?Response 对象 错误 ASP 0251 : 80004005超过响应缓冲区限制/py11g/list.asp,行 0此 ASP 页的执行造成响应缓冲区超过其配置限制。我要RESPONSE.WRITE 的数据量的确非常大,但是必须回写的,如何更改设置或者程序 ———————–

    2022年8月31日
    0
  • 利用#ZipLib,完成C#下的解压缩「建议收藏」

    利用#ZipLib,完成C#下的解压缩「建议收藏」 ICSharpCode.SharpZipLib.dll是一个压缩的类库,似乎不是微软提供的1.BZip2    加入ICSharpCode.SharpZipLib.dll的引用,在#Develop的安装目录下的/SharpDevelop/bin目录下。然后在程序中使用using语句把BZip2类库包含进来。压缩:使用BZip2的静态方法Compress。    它的第一个参数是所要压缩

    2022年7月26日
    3

发表回复

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

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