爬虫练习3 爬取堆糖网校花照片

知识点:

多线程的实现图片的下载及写入字符串高级查找了解动态加载和jsonrequest 的用法
获取数据的api‘https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000‘图片路径 "path": "https://b-ssl.duitang.com/uploads/item/201509/18/20150918195615_JfdKm.jpeg"
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: benjaminYang

import requests,threading
import urllib.parse

#设置最大线程 开启30个线程就锁住
thread_lock=threading.BoundedSemaphore(value=50)

‘https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000‘
#通过url 获取数据
def get_page(url):
    #requests.get 自带了json.loads
    page=requests.get(url)
    page=page.content
    # 将bytes转成 字符串
    page=page.decode(‘utf-8‘)
    return page

def pages_from_duitang(label):
    pages=[]
    url=‘https://www.duitang.com/napi/blog/list/by_search/?kw={}&start={}&limt=1000‘
    #将中文转成url编码
    label=urllib.parse.quote(label)
    #0-3600 步长100
    for index in range(0,3600,50):
        #将这两个变量替换占位符{}
        u=url.format(label,index)
        page=get_page(u)
        pages.append(page)
    return pages

# print(get_page(‘https://www.duitang.com/napi/blog/list/by_search/?kw=%E6%A0%A1%E8%8A%B1&start=0&limt=1000‘))

# 单个页面的对象,startpart 所要匹配字符1,匹配的字符2
def findall_in_page(page,startpart,endpart):
    all_strings=[]
    end=0
    # -1代表找不到 意思就是匹配到就执行循环
    while page.find(startpart,end) !=-1:
        #匹配第一个字符,从下标0开始匹配到的位置下标,并将字符长短传给start变量
        start=page.find(startpart,end)+len(startpart)
        # 将从第一个需要匹配的字符串后面的字符开始,匹配第二个需要匹配的字符出现的位置,并将这个下标值赋给end变量
        end=page.find(endpart,start)
        #切片 取两个所要匹配字符 之间的部分也就是图片url
        string=page[start:end]
        #存入列表
        all_strings.append(string)
    return all_strings

# "path": "https://b-ssl.duitang.com/uploads/item/201708/20/20170820215827_fa483.jpeg"
def pic_urls_from_pages(pages):
    pic_urls=[]
    for page in pages:
        urls=findall_in_page(page,‘path":"‘,‘"‘)
        pic_urls.extend(urls) # 合并列表
    return pic_urls

def download_pics(url,n):
    r=requests.get(url)
    path=‘pics/‘+ str(n) + ‘.jpg‘
    with open(path,‘wb‘) as f:
        f.write(r.content)
    #下载完了,解锁
    thread_lock.release()

def main(label):
     pages=pages_from_duitang(label)
     pic_urls=pic_urls_from_pages(pages)
     n=0
     for url in pic_urls:
        n +=1
        print(‘正在下载第{}张图片‘.format(n))

        #上锁
        thread_lock.acquire()
        #下载 这个方法丢进线程池
        t=threading.Thread(target=download_pics,args=(url,n))
        t.start()

main(‘校花‘)

此学习资源来自--潭州Python学院

时间: 2024-11-08 16:09:28

爬虫练习3 爬取堆糖网校花照片的相关文章

零基础爬取堆糖网图片(一)

零基础爬取堆糖网图片(一) 全文介绍: 首先堆糖网是一个美图壁纸兴趣社区,有大量的美女图片 今天我们实现搜索关键字爬取堆糖网上相关的美图. 当然我们还可以实现多线程爬虫,加快爬虫爬取速度 涉及内容: 爬虫基本流程 requests库基本使用 urllib.parse模块 json包 jsonpath库 图例说明: 请求与响应 sequenceDiagram 浏览器->>服务器: 请求 服务器-->>浏览器: 响应 爬虫基本流程 graph TD A[目标网站] -->|分析网

Python 爬取堆糖图片

1 import requests,json,urllib.parse 2 import threading 3 threading_lock=threading.BoundedSemaphore(value=10)#设置最大线程 4 5 def get_page(url): 6 page=requests.get(url) 7 page=page.content 8 page=page.decode('utf-8') 9 return page 10 11 def pages_from_dui

python3网络爬虫(2.1):爬取堆糖美女

额,明明记得昨晚存了草稿箱,一觉醒来没了,那就简写点(其实是具体怎么解释我也不太懂/xk,纯属个人理解,有错误还望指正) 环境: 版本:python3 IDE:pycharm2017.3.3 浏览器:火狐(浏览器建议火狐,Chrome) 爬取网站:堆糖 选堆糖是因为比较好爬取(除了img文件就是xhr文件),别网站的反爬取对我这个水平来说都太心机了 安装配置什么的之前都写过,这里就不提了,直接开始 1.先来浏览一下这个网站,打开堆糖官网,搜索校花,他就会给我们推荐一些图片,当我们滚动到页面底部时

【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可

爬虫的定向爬取与垂直搜索

转 爬虫的定向爬取与垂直搜索 定向爬虫是网络爬虫的一种. 定向爬虫 定向爬虫可以精准的获取目标站点信息. 定向爬虫获取信息,配上手工或者自动的模版进行信息匹配,将信息进行格式化分析存储. 优势: 基于模版的信息提取技术,能提供更加精准的信息.比如价格,房屋面积,时间,职位,公司名等等. 劣势: 目标网站难以大面积覆盖,因为基于模版匹配的信息提取技术,需要人工的参与配置模版,欲要大面积覆盖各个目标网站,需要大量的人力成本,同样维护模板也需要很大的人力成本. 也就是说定向爬取就是我们要针对不同的网页

教你分分钟学会用python爬虫框架Scrapy爬取你想要的内容

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 python爬虫学习课程,下载地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 课程代码原件:课程视频: 原文地址:http://blog.51cto.com/aino007/2123341

爬虫入门之爬取策略 XPath与bs4实现(五)

爬虫入门之爬取策略 XPath与bs4实现(五) 在爬虫系统中,待抓取URL队列是很重要的一部分.待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面.而决定这些URL排列顺序的方法,叫做抓取策略.下面重点介绍几种常见的抓取策略: 1 深度优先遍历策略: 深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接.我们以下面的图为例:遍历的路径:A-F-G E-H-I B C D

Python 爬虫入门之爬取妹子图

Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob/master/%E7%88%AC%E8%99%AB%E9%9B%86%E5%90%88/meizitu.py 爬虫成果 当你运行代码后,文件夹就会越来越多,如果爬完的话会有2

python爬虫-基础入门-爬取整个网站《3》

python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python2.x 使用类库: >> urllib 库 >> urllib2 库 python3.x 使用的类库: >> urllib 库 变化: -> 在python2.x中使用import urllib2 ----- 对应的,在python3.x 中会使用import url