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


相关推荐

  • navicat永久激活码最新【2021免费激活】

    (navicat永久激活码最新)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0X1Z…

    2022年3月28日
    113
  • icmp 报文详解

    icmp 报文详解以下内容转载自: http://blog.csdn.net/tigerjibo/article/details/7356936写的很好的icmp报文详解:一.概述:1.   ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(

    2022年4月29日
    44
  • idea2021永久破解激活码[在线序列号]

    idea2021永久破解激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    658
  • vue中splice和$emit使用

    vue中splice和$emit使用splice函数用法splice(index,len,[item])它也可以用来替换/删除/添加数组内某一个或者几个值(该方法会改变原始数组)ndex:数组开始下标len: 替换/删除的长度item:替换的值,删除操作的话 item为空删除://删除起始下标为1,长度为1的一个值(len设置1,如果为0,则数组不变)var arr = [‘a’,…

    2022年6月13日
    26
  • Spring AOP详解[通俗易懂]

    Spring AOP详解[通俗易懂]一、AOP1.1、AOP介绍1.1.1、什么是AOP?在软件业,AOP为AspectOrientedProgramming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从…

    2022年8月11日
    5
  • eclipse导入maven工程没有src/main/resources文件夹

    eclipse导入maven工程没有src/main/resources文件夹很多时候导入maven工程的时候没有src/main/resources文件夹今天写个博客记录下如何解决首先右击项目然后如图所示然后点击ok再应用然后就先显示资源文件夹了…

    2022年5月31日
    36

发表回复

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

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