1.requests库
import requests
requests.get( ' http://www.dict.baidu.com/s ', params={ ' wd ': ' python '}) # GET参数实例
requests.get( ' http://www.dict.baidu.com/s ', params={ ' wd ': ' python '}) # GET参数实例
requests.post(
'
http://www.itwhy.org/wp-comments-post.php
', data={
'
comment
':
'
测试POST
'})
#
POST参数实例
可以使用get进行接收,获取一个response对象,可用text方法进行解码
r = requests.get(
'
http://www.itwhy.org
')
其他方法如下
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
2.字符串查找
String.find('aaa',pos)查找的字符串,pos为查找位置,返回为开头位置
def find_in_page(page,startpart,endpart):
image_url=[]
end= 0
while page.find(startpart,end)!=- 1:
start=page.find(startpart,end)+ len(startpart)
end=page.find(endpart,start)
string=page[start:end]
image_url.append(string)
image_url=[]
end= 0
while page.find(startpart,end)!=- 1:
start=page.find(startpart,end)+ len(startpart)
end=page.find(endpart,start)
string=page[start:end]
image_url.append(string)
return image_url
也可以用正则匹配,之后再研究吧
3.线程
使用threading库
# 设置线程锁
thread_lock = threading.BoundedSemaphore(
value=
10)
thread_lock.acquire()
t=threading.Thread(
target=download_pic,
args=(pic_url, label, n))
t.start()
thread_lock.release()
使用线程锁进行线程任务,要记得任务完成后释放线程
完整代码
import requests
import urllib
from bs4 import BeautifulSoup
import lxml
import os
import threading
import json
# 设置线程锁
thread_lock = threading.BoundedSemaphore(value=10)
# 获取url
def page_from_url(url):
html = requests.get(url).content.decode('utf-8')
return html
# 找出相关label
def page_from_label(label):
pages=[]
label = urllib.parse.quote(label)
url = 'https://www.duitang.com/napi/blog/list/by_search/?kw={}&start={}&limit=1000'
for i in range(0,3000,100):
new_url = url.format(label,i)
page=page_from_url(new_url)
pages.append(page)
return pages
# 从page中爬出图片
def find_in_page(page,startpart,endpart):
image_url=[]
end=0
while page.find(startpart,end)!=-1:
start=page.find(startpart,end)+len(startpart)
end=page.find(endpart,start)
string=page[start:end]
image_url.append(string)
return image_url
# 下载图片
def download_pic(url,label,n):
r = requests.get(url)
path = 'pics//'+str(label)+'//'+str(n)+'.jpeg'
print('正在下载第'+str(n)+'张图片')
with open(path,'wb') as f:
f.write(r.content)
thread_lock.release()
# url='https://www.duitang.com/napi/blog/list/by_search/?kw=%E7%A9%B9%E5%A6%B9cos&start=0&limit=1000'
def main(label):
pages = page_from_label(label)
n=0
for page in pages:
pics_url=find_in_page(page, 'path":"', '"')
for pic_url in pics_url:
n+=1
# download_pic(pic_url, label, n)
thread_lock.acquire()
t=threading.Thread(target=download_pic,args=(pic_url, label, n))
t.start()
label = '守望先锋'#label的东西改变即可
if __name__=='__main__':
os.makedirs('pics//'+str(label))
main(label)