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

额,明明记得昨晚存了草稿箱,一觉醒来没了,那就简写点(其实是具体怎么解释我也不太懂/xk,纯属个人理解,有错误还望指正)

环境:

  版本:python3

  IDE:pycharm2017.3.3

  浏览器:火狐(浏览器建议火狐,Chrome)

  爬取网站:堆糖

选堆糖是因为比较好爬取(除了img文件就是xhr文件),别网站的反爬取对我这个水平来说都太心机了

安装配置什么的之前都写过,这里就不提了,直接开始

1.先来浏览一下这个网站,打开堆糖官网,搜索校花,他就会给我们推荐一些图片,当我们滚动到页面底部时,他又会加载新的一些图片,再滚到底,再加载,这样加载了五次,才把第一页的所有图片加载出来(这里体现了这个网站的防爬,不过也好破)

我们的目标就是把这19页,每页的图片都爬下来

2.重新搜索一下关键字,我们先不往下滚动,右键查看元素,选择网络,可以看到目前这一页中加载的图片,

3.然后我们把页面往下滚动,让他继续加载,同时我们观察者网络这个窗口,所有请求的图片也都显示在这里,这时发现xhr类型的文件,这样的文件一共有五个,也就是同一页面中每次滚动到页面底部,新加载图片时就会出现这样的文件

4.主要关注一下这个文件,把窗口切换到xhr类型下,双击打开其中的一个

5.这个请求网址使我们需要的,复制到地址栏中

6.这里打开如果是所有代码堆在一起的那样,就需要在线解析一下,解析工具将地址复制进去进行校验

  而我这里的火狐浏览器打开直接就是转换好的

  其中的path就是我们需要的

而这个limit就是限制我们爬取数量的参数,后面需要修改这个参数来爬取全部图片

7.对请求地址进行分析

https://www.duitang.com/napi/blog/list/by_search/?kw=校花&type=feed&include_fields=top_comments,is_root,source_link,item,buyable,root_id,status,like_count,sender,album&_type=&start=24&_=1520036797589

  将没用的删掉

https://www.duitang.com/napi/blog/list/by_search/?kw=校花&start=24

  修改参数start(从0开始爬取),添加参数limit(上限),格式都是&开头

https://www.duitang.com/napi/blog/list/by_search/?kw=校花&start=0&limit=1000

以上就是爬取的分析过程,代码如下

 1 import requests
 2 import urllib.parse
 3 import threading
 4 #设置最大线程value
 5 thread_lock = threading.BoundedSemaphore(value=10)
 6
 7
 8 #通过url获取数据
 9 def get_page(url):
10     page = requests.get(url)
11     page = page.content
12     #将bytes转成字符串
13     page = page.decode(‘utf-8‘)
14     return page
15 #label为关键字
16 def pages_from_duitang(label):
17     pages = []
18     url = ‘https://www.duitang.com/napi/blog/list/by_search/?kw={}&start=0&limit=1000‘
19     #将中文转成url编码
20     label = urllib.parse.quote(label)
21     for index in range(0, 3600, 100):
22         u = url.format(label, index)
23         print(u)
24         page = get_page(u)
25         pages.append(page)
26         return pages
27
28
29 #通过切片提取路径
30 def findall_in_page(page, startpart, endpart):
31     all_strings = []
32     end = 0
33     while page.find(startpart, end) != -1:
34         start = page.find(startpart, end) + len(startpart)
35         end = page.find(endpart, start)
36         string = page[start:end]
37         all_strings.append(string)
38     return all_strings
39 #返回所有图片的链接
40 def pic_urls_from_pages(pages):
41     pic_urls = []
42     for page in pages:
43         urls = findall_in_page(page, ‘path":"‘, ‘"‘)
44         pic_urls.extend(urls)
45     return pic_urls
46 #下载图片
47 def download_pics(url, n):
48     r = requests.get(url)
49     path = ‘../pics/‘ + str(n) + ‘.jpg‘
50     with open(path, ‘wb‘) as f:
51         f.write(r.content)
52     #解锁
53     thread_lock.release()
54
55 def main(label):
56     pages = pages_from_duitang(label)
57     pic_urls = pic_urls_from_pages(pages)
58     n = 0
59     for url in pic_urls:
60         n += 1
61         print("正在下载第{}张图片".format(n))
62         #上锁
63         thread_lock.acquire()
64         t = threading.Thread(target=download_pics, args=(url, n))
65         t.start()
66
67
68 main(‘校花‘)

 pics是我们需要新建的文件夹

目录结构如下,d2018.3.2_urlopen.py是代码,pics是用来存图片的文件夹

运行结果

校花们就都存入囊中了,但是数量有点少,只有100个,好像是只爬取了一页的图片,代码应该还有点小问题

不同的网站防爬不一样,但思路应该都差不多

 

原文地址:https://www.cnblogs.com/MC-Curry/p/8495786.html

时间: 2024-10-09 00:36:03

python3网络爬虫(2.1):爬取堆糖美女的相关文章

爬虫练习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.

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

零基础爬取堆糖网图片(一) 全文介绍: 首先堆糖网是一个美图壁纸兴趣社区,有大量的美女图片 今天我们实现搜索关键字爬取堆糖网上相关的美图. 当然我们还可以实现多线程爬虫,加快爬虫爬取速度 涉及内容: 爬虫基本流程 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

一个简单的网络爬虫-从网上爬取美女图片

CrawlerPicture.java 文件 package com.lym.crawlerDemo; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import

2019基于python的网络爬虫系列,爬取糗事百科

**因为糗事百科的URL改变,正则表达式也发生了改变,导致了网上许多的代码不能使用,所以写下了这一篇博客,希望对大家有所帮助,谢谢!** 废话不多说,直接上代码. 为了方便提取数据,我用的是beautifulsoup库和requests ![使用requests和bs4](https://img-blog.csdnimg.cn/20191017093920758.png) ``## 具体代码如下 ```import requestsfrom bs4 import BeautifulSoup de

Python3网络爬虫(七):使用Beautiful Soup爬取小说

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简

Python3网络爬虫(十):这个帅哥、肌肉男横行的世界(爬取帅哥图)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Python3网络爬虫(十):这个帅哥.肌肉男横行的世界(爬取帅哥图) - Jack-Cui - 博客频道 - CSDN.NET Jack-Cui 努力-是为了将运气成分降到最低 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯

【Python3 爬虫】U11_爬取中国天气网

目录 1.网页分析 2.代码实现 1.网页分析 庚子年初,各种大事件不期而至,又赶上最近气温突变,所以写个爬虫来爬取下中国天气网,并通过图表反映气温最低的前20个城市. 中国天气网:http://www.weather.com.cn/textFC/hb.shtml 打开后如下图: 从图中可以看到所有城市按照地区划分了,并且每个城市都有最低气温和最高气温,通过chrome查看Elements,如下: 从上图可以看到展示当天的数据,那么<div class='conMidtab'>..这个标签则没

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

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