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


相关推荐

  • Pytest(1)安装与入门[通俗易懂]

    Pytest(1)安装与入门[通俗易懂]pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月29日
    5
  • go微服务框架go-micro深度学习(二) 入门例子

    go微服务框架go-micro深度学习(二) 入门例子

    2021年6月13日
    320
  • 串口通信-MSComm控件使用详解

    串口通信-MSComm控件使用详解MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 MicrosoftCommunicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通…

    2025年6月26日
    2
  • 基于单片机的毕业设计题目_单片机课题

    基于单片机的毕业设计题目_单片机课题地铁报站系统方案说明经过酷毕啦电子设计室3个月的奋斗和不限努力,设计出了2款有个报站系统的课题:一种为自动报站系统;一种为无线控制报站系统,该系统除了可以设计为地铁报站系统,还可以设计成公交报站系统,有需要了解和学习的同学可以加q:3407232510来进行学习和探讨。本系统所有的全国各地的地铁,无论几号线,都实用这套系统,完全个性定制!产品视频讲解视频链接*(以长沙地铁2号线讲解为例):htt…

    2022年9月28日
    2
  • k8s 微服务打包上传私库、部署、发布

    k8s 微服务打包上传私库、部署、发布微服务打包上传私库、部署、发布1.Ideamaven打包修改配置文件yml的eureka地址:http://10.0.0.111:11111/eurekaMaven打成jar包。2.

    2022年7月1日
    25
  • 谷歌离线地图Api附获取教程[通俗易懂]

    谷歌离线地图Api附获取教程[通俗易懂]GoogleMapAPIV3来自:https://www.cnblogs.com/liongis/archive/2011/04/28/2032316.htmlGoogleMapsAPI_OfflineDebugPack来自:https://www.cnblogs.com/Tangf/archive/2009/02/20/1394511.html两个Api下载链接:https://pan.baidu.com/s/1SfRccuFHo1qsQyKK_LJBiA提取码:t64t从谷歌官方网站获取最

    2022年9月20日
    1

发表回复

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

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