html给图片做定位_我爬了10G的妹子图片...

python爬虫之xpath

临江仙

  77d904d0fc9f46a42f5b82339e5d7a69.png

结果:

6022bdadaf61f85daa0956c7603b8dc1.png

00aa074a60305a4dd2607e8b704c89e3.png

    我真的没有别的意思哈。我也不想透过数据看本(妹)质(子),本文主要介绍python的lxml包,lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。其中的XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

    希望大家使用爬虫的时候遵守网站robots.txt中的爬虫协议,不管是爬图片、评论等以个人收集为目的,不要占用站长大量带宽。好了废话不多说了,我们先以爬帅哥为例,本文爬取url为唯一图库网:http://www.mmonly.cc/sgtp/list_1_1.html。

d9298728d57e21f954b7645b81209a53.png

可以看到一个页面有24个图集,每个图集里面还有图,总共有909页。

d98e6bb236e59f23d98fcb96ee6af542.png

首先找到每个图集.jpg的位置

212f2a41a969a122a4df61819c72497d.png

d817d2da36c408019eac7d899d41dadd.png

xpath在哪呢,利用浏览器html代码中点击右键找到copy,再到copy xpath复制下来如下:

//*[@id="infinite_scroll"]/div[7]/div[1]/div/div[1]/a/img

这就是xpath的结构,通过这种方式我们就能很好定位了,不用re去写了。不过这里得注意嵌套型定位,找到图集再进入然后再采集图片。中间过程就很简单了,主要是xpath定位好。爬取速度还是不够快,大概一小时2个G,后续可能会介绍用scrapy框架爬取acg漫画。

全部代码如下:

#导入需要的库import osimport urllibimport requestsfrom lxml import htmlimport timefrom requests.packages.urllib3.exceptions import InsecureRequestWarning# 禁用安全请求警告requests.packages.urllib3.disable_warnings(InsecureRequestWarning)os.mkdir('sg')#第一次运行新建sg文件夹for page in range(1,910): #总共909页    print(page)    url='http://www.mmonly.cc/sgtp/list_1_%s.html'%page #构建的url    print(url)    response=requests.get(url,verify=False).text    selector=html.fromstring(response)    imgEle=selector.xpath('//div[@]/a')  #大框架    print(len(imgEle))#打印 一个页面有24个帅哥图集    """    第一个for循环是爬取首页url 上对应的24个图集 封面    比如图集A 有5张图,在第一页24个图集里面封面就是图集A的第一张图    所以在第二个for循环爬图集A的剩下的4张图    """for index,img in enumerate(imgEle):        imgUrl=img.xpath('@href')[0]        response=requests.get(imgUrl,verify=False).text        selector = html.fromstring(response)        pageEle = selector.xpath('//div[@]/h1/span/span[2]/text()')[0] #图集框架        print(pageEle) #进入每一个图集里面包含的图片 #这里将打印第一页总共多少个图集 然后打印每一个图集下有多少张图        imgE=selector.xpath('//a[@]/@href')[0] #下载原图 锁定位置        imgName = '%s_%s_1.jpg' % (page,str(index+1))        coverPath = '%s/sg/%s' % (os.getcwd(), imgName)        urllib.request.urlretrieve(imgE, coverPath)for page_2 in range(2,int(pageEle)+1):            url=imgUrl.replace('.html', '_%s.html' % str(page_2))            response = requests.get(url).text            selector = html.fromstring(response)            imgEle = selector.xpath('//a[@]/@href')[0]            print(imgEle)            imgName='%s_%s_%s.jpg'%(page,str(index+1),page_2)            coverPath = '%s/sg/%s' % (os.getcwd(), imgName)            urllib.request.urlretrieve(imgEle, coverPath)  #保存到本地    time.sleep(2)#不要爬太快

给大家看看帅哥:

ddc3e019087eddac2f0db1458973c57d.png

c2168753419423bde727a66cc87507ae.gif    

56ab6c957df0c0c07d60309e2cb0105f.png 风物长宜放眼量

           好读书,不求甚解...!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值