python批量爬取美女买家秀,附成品
课前分享:
早上看到吴军的付费写作课瞄了一眼觉得言之有物的,就给群友安排在线课程了(可听音频)。为了方便大家离线学习又做成一份pdf,以飨群友。
考虑到内容不错,今天破例把这份文档也分享给公众号粉丝。为防止公众号被举报,这份pdf(带目录书签)就挂在就挂在懒人盘08栏,需要的自取。
客观来讲,表达一直是我们中国学生的弱项。一个是演讲,一个是交流表达。演讲就不用多说了,我们从小接受中庸之道的教育,偏向于低调内敛,所以即使有上台的机会都会推脱,其实上台演讲挺能锻炼人的,训练出自己的台风也很能培养自信。小懒发现,每次公开演讲总能收获不少迷妹,在台上能高效释放你的魅力。关于演讲,小懒给出的经验是:模仿。表达亦然,小懒算比较能聊的了,也常常出现词不达意的状况。
所以除了阅读写作能力,表达能力也是我们亟需提高的。课程不错,即使作为科普也能看看里面提到的那些经典文学。
(下图打码是为了防止被举报)
懒人盘地址:http://lazyman.ys168.com/
08栏打开密码:lazy
开始上爬虫课
公众号追求雅俗共赏。兴趣是学习最好的动力,今天教大家如何利用python爬取一个网站的美女买家秀,希望能促进大家对编程的热情和冲动~
这篇文章手把手教你如何获取关键信息,如何写代码。适合零基础~
文末除了贴出源代码还直接分享编译好的软件,方便没有python环境的朋友运行。
经常逛懒人导航的同学们可能会注意到在娱乐栏多了个“爱看买家秀”的网站,下面的奇葩买家秀是搞笑的,上面这个相对来水养眼许多
https://www.ikmjx.com/
请大家带着欣赏的眼光进入:
咳咳,这篇是技术贴哈,图片只是引子,欢迎以技术的眼光看待,图片也没有任不合规的哈
我们的目的是批量下载这些大图到电脑本地。
教程开始
网站的网络请求里会有我们想要的一信息,首先要打开开发者检查工具,你会发现这个网站鼠标右键被禁用了。不慌,按一下F12就出来了。
网站地址页是没有页数的,说明这个数据是动态加载。
在Network里,点击查看更多,会看到出来一个数字,这个就代表第几页:
https://www.ikmjx.com/page/3
通过构造page后面的数字就能遍历页数
接下来就是找到每个帖子的链接
在Element栏里观察页面结构,因为右键检查被禁了所以就要手工点击定位了。可以看到详情页躲在这里~
我们拿到这个连接的选择器就可以了!
鼠标右键——copy——copy selector
好了,可以写代码了:
import requests
from bs4 import BeautifulSoup
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
"cookie": "UM_distinctid=173460675281-0661aaebccefbd-4353760-1fa400-1734606752922; CNZZDATA1278931286=993601351-1594606220-%7C1594606220; __51cke__=; __tins__20800469=%7B%22sid%22%3A%201594607695345%2C%20%22vd%22%3A%203%2C%20%22expires%22%3A%201594609525158%7D; __51laig__=3"
}
def get_link():
for p in range(1,10):
url = "https://www.ikmjx.com/page/%s" % p
web_data = requests.get(url=url,headers=headers)
# print(web_data)
soup = BeautifulSoup(web_data.text,'lxml')
links = soup.select('body > div.index > div.content > div > div > div.postcon > a')
for i in links:
link = i.get('href')
print(link)
get_link()
user-agent 和 cookie 都可以在 NetWork 里复制过来
代码里获取了十页,估计每页有10贴。都打印出来了。
每一个链接代表一个详情页,接下来在详情页里获取图片地址了。
用同样的方式找到图片地址,这里是在src后面。鼠标在链接上右键——copy——copy selector ,这样就获取到了这个页面的选择器了。
用这页单独写代码:
import requests
from bs4 import BeautifulSoup
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
"cookie": "UM_distinctid=173460675281-0661aaebccefbd-4353760-1fa400-1734606752922; CNZZDATA1278931286=993601351-1594606220-%7C1594606220; __51cke__=; __tins__20800469=%7B%22sid%22%3A%201594607695345%2C%20%22vd%22%3A%203%2C%20%22expires%22%3A%201594609525158%7D; __51laig__=3"
}
def get_detail():
url = "https://www.ikmjx.com/883.html"
web_data = requests.get(url=url, headers=headers)
soup = BeautifulSoup(web_data.text, 'lxml')
imgs = soup.select('body > div.single > div.content > div > div.singlecon > p > img')
for i in imgs:
img = i.get('src')
print(img)
get_detail()
成功输出大图链接:
把两个函数嵌套在一起就可以批量得到这些图片地址了,然后单独用一个函数下载。考虑到不难爬,这里直接用单线程一张张下载。
大家可以通过修改rang()里面的数字来决定不同的页面下载,比如(1,10)代表下第一页到第九页。
为了测试脚本稳定性,小懒人跑了一会儿,就下来一百多张了。
另外为了方面没有python环境的朋友,小懒特地把程序封装成exe了,粉丝在后台领取完软件,双击运行后输入下载的页数然后回车就行,图片将在同级目录生成。希望这个小工具带给你快乐,或者去直接去那个网站逛也行。
软件下载方式见文末
完整代码:
import requests,time
from bs4 import BeautifulSoup
from contextlib import closing
import sys
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
"cookie": "UM_distinctid=173460675281-0661aaebccefbd-4353760-1fa400-1734606752922; CNZZDATA1278931286=993601351-1594606220-%7C1594606220; __51cke__=; __tins__20800469=%7B%22sid%22%3A%201594607695345%2C%20%22vd%22%3A%203%2C%20%22expires%22%3A%201594609525158%7D; __51laig__=3"
}
headers1 = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; MI 4S Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3',
}
def download(link):
# link = "https://www.ikmjx.com/wp-content/uploads/2020/06/O1CN01bA5jgt1tuBXl978Ei_0-rate.jpg"
size = 0
with closing(requests.get(link, headers=headers1, stream=True)) as response:
chunk_size = 1024
content_size = int(response.headers['content-length'])
if response.status_code == 200:
sys.stdout.write(' [文件大小]:%0.2f MB\n' % (content_size / chunk_size / 1024))
pic_name = link.split('/')[-1]
with open(pic_name, 'wb') as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
size += len(data)
file.flush()
sys.stdout.write(' [下载进度]:%.2f%%' % float(size / content_size * 100) + '\r')
sys.stdout.flush()
def get_detail(url):
# url = "https://www.ikmjx.com/923.html"
web_data = requests.get(url=url, headers=headers)
soup = BeautifulSoup(web_data.text, 'lxml')
imgs = soup.select('body > div.single > div.content > div > div.singlecon > p > img')
for i in imgs:
img = i.get('src')
print(img.split('/')[-1])
download(img)
def get_link():
for ii in range(1,10):
url = "https://www.ikmjx.com/page/%s" % ii
web_data = requests.get(url=url,headers=headers)
# print(web_data)
soup = BeautifulSoup(web_data.text,'lxml')
links = soup.select('body > div.index > div.content > div > div > div.postcon > a')
for i in links:
link = i.get('href')
print("正在下载第%s页"%ii)
get_detail(link)
time.sleep(3)
print("休息个3秒再接着爬哈")
get_link()
公众号后台回复“200714”领取这个美女卖家秀图片下载软件,至于源码上面就是了。PS,别爬得太多把人家网站弄疼了~
推荐阅读