python爬取网页图片src(python爬取网站图片并保存)
使用python爬取网页,获取不到图片地址
这个大图片是在点击之后用 JS 控制加载的。
你可以看看 js/js.js 这个文件,253 行:
function?changeImg(){
jQuery("#bitImg").attr('src','p/p'+pictID+'/'+indexNum+'.'+jpgPng);
}
其实大图的规律很好找, 下面缩略图列表的 src 可以用 #variContent li img 取到,可以在源码中的 107 行找到:
view-source:
缩略图列表地址长这样:
/p/p0997/tn/1.jpg
/p/p0997/tn/2.jpg
/p/p0997/tn/3.jpg
...
如果要获取大图,只要去掉“tn”这一段就可以:
/p/p0997/1.jpg
/p/p0997/2.jpg
/p/p0997/3.jpg
...
然后拼接域名在前面,GET 下来就是大图,比如第一个大图链接:
第一个大图地址
不过,你如果仅仅只是想要抓那个站的全部素材,穷举“p0997”这一段的序号(比如改成“p0098”,这个应该是图集的 ID),并且遍历最后一段的图片序号,扩展名可能是 jpg 也可能是 png,从 1 开始(“1.jpg”,“2.jpg”...)直到返回 404 停止。
思路大概是这么个思路,不过话说回来,你这么爬人家素材真的道德吗?
python如何才能获取src地址
Copyright ? 1999-2020, CSDN.NET, All Rights Reserved
python
打开APP
pergoods
关注
Python多线程爬取网站image的src属性实例 原创
2017-05-16 11:18:51
pergoods
码龄6年
关注
# coding=utf-8
'''
Created on 2017年5月16日
@author: chenkai
Python多线程爬取某单无聊图图片地址(requests+BeautifulSoup+threading+Queue模块)
'''
import requests
from bs4 import BeautifulSoup
import threading
import Queue
import time
class Spider_Test(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self.__queue = queue
def run(self):
while not self.__queue.empty():
page_url=self.__queue.get() [color=red]#从队列中取出url[/color]
print page_url
self.spider(page_url)
def spider(self,url):
r=requests.get(url) [color=red]#请求url[/color]
soup=BeautifulSoup(r.content,'lxml') [color=red]#r.content就是响应内容,转换为lxml的bs对象[/color]
imgs = soup.find_all(name='img',attrs={}) #查找所有的img标签,并获取标签属性值(为列表类型)
for img in imgs:
if 'onload' in str(img): [color=red]#img属性集合中包含onload属性的为动态图.gif,[/color]
print 'http:'+img['org_src']
else:
print 'http:'+img['src']
def main():
queue=Queue.Queue()
url_start = '-'
for i in range(293,295):
url = url_start+str(i)+'#comment'
queue.put(url) [color=red]#将循环拼接的url放入队列中[/color]
threads=[]
thread_count=2 [color=red]#默认线程数(可自动修改)[/color]
for i in range(thread_count):
threads.append(Spider_Test(queue))
for i in threads:
i.start()
for i in threads:
i.join()
if __name__ == '__main__':[color=red] #在.py文件中使用这个条件语句,可以使这个条件语句块中的命令只在它独立运行时才执行[/color]
time_start = time.time()
main() [color=red]#调用main方法[/color]
print time.time()-time_start
[color=red]#背景知识[/color]
'''
q = Queue.Queue(maxsize = 10)
Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。
将一个值放入队列中
q.put(10)
调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为
1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。
将一个值从队列中取出
q.get()
调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。
'''
[color=red]如果想要下载图片需要
import urllib
再替换spider方法即可[/color]
def spider(self,url):
r=requests.get(url)
soup=BeautifulSoup(r.content,'lxml')
imgs = soup.find_all(name='img',attrs={})
urls=[]
for img in imgs:
if 'onload' in str(img):
print 'http:'+img['org_src']
urls.append('http:'+img['org_src'])
else:
print 'http:'+img['src']
url = urls.append('http:'+img['src'])
#下载图片
k=0
for urlitem in urls:
k+=1
if '.jpg' in urlitem:
urllib.urlretrieve(url=urlitem,filename='F:\image\\'+str(k)+'.jpg')
[color=red]-----------多线程访问百度实例[/color]
#coding:utf-8
import requests
import threading
import time
import sys
url = ''
def get_baidu():
global url
time_start = time.time()
r = requests.get(url=url)
times = time.time()-time_start
sys.stdout.write('status:%s time:%s current_time:%s\n'%(r.status_code,times,time.strftime('%H:%M:%S')))
def main():
threads = []
thread_count = 10
for i in range(thread_count):
t = threading.Thread(target=get_baidu,args=())
threads.append(t)
for i in range(thread_count):
threads[i].start()
for i in range(thread_count):
threads[i].join()
if __name__=='__main__':
python爬取验证码图片,遇到验证码src属性为完整的网址应该怎么做?
爬虫中手动输入验证码方法无法获取图片src地址
验证码在html中图片标签内容:
class=“verCodeImg” src="/kaptcha.jpg?v=0.234724039578059" οnclick=“verCode(this)”
class=“verCodeImg” src="/kaptcha.jpg?v=0.234724239578059" οnclick=“verCode(this)”
可知获取到验证码的src地址就能动态的获得验证码
因为验证码是动态的!动态的!动态的!
用动态爬取网页的方法:
要用到selenium库
其实获得了验证码的src地址,我还是没能成功登陆
因为即使是相同的链接点进去,每一次刷新都会有不同的验证码
通过动态网页打开是一张
解析src地址出来是另一张