pip install requests
import requests
source = requests.get('https://www.baidu.com').content.deocde()
import requests
html = requests.get('网址')
html_bytes = html.content #二进制
html_str = html_bytes.decode() #转码
html_str = requests.get('网址').content.decode()
post提交的数据在请求体中,因此不能直接通过拼接url的形式访问网页资源
post提交的数据要借助data或json参数
import requests
data = [{'key':value}, ]
#用formdata提交数据
#html_str = requests.post('网址', data = data).content.decode()
#某一些网站需要用json格式数据提交
#用json提交数据
html_str = requests.post('网址', json = data).content.decode()
import requests
html = requests.get('https://exercise.kingname.info/exercise_requests_get.html').content.decode()
print(html)
import re
#正则表达式
ptn = 'title>.*?
import requests
data = {'name':'username', 'password':'123456'}
html = requests.post('https://exercise.kingname.info/exercise_requests_post.html', json = data).content.decode()
print(html)
import re
#正则表达式
ptn = 'title>.*?
multiprocessing本身是Python的多进程库,用来处理与多进程相关的操作。但是由于进程与进程之间不能直接共享内存和堆栈资源,而且启动新的进程开销也比线程大得多,因此使用多线程来爬取比使用多进程有更多的优势。
multiprocessing下面有一个dummy模块,它可以让Python的线程使用multiprocessing的各种方法。
dummy下面有一个Pool类,它用来实现线程池。这个线程池有一个map()方法,可以让线程池里面的所有线程都“同时”执行一个函数。
一般写法
for i in range(1,11):
print(i*i)
多线程写法
from multiprocessing.dummy import Pool
#功能函数
del calc_power2(num):
return num*num
#开启三个线程
pools = Pool(3)
#数据源
origin_num = [i for i in range(1,11) ]
result = pool.map(calc_power2, origin_num)
print('结果为:{}'.format(result))
一般写法
import time
import requests
def query(url):
requests.get(url)
start = time.time()
for i in range(100):
query('https://baidu.com')
end = time.time()
print('花费时间{}'.format( (end-start) ) )
多线程写法
import time
import requests
from multiprocessing.dummy import Pool
def query(url):
requests.get(url)
start = time.time()
url_list = []
for i in range(100):
url_list.append('https://baidu.com')
pool = Pool(10)
pool.map(query, url_list)
end = time.time()
print('花费时间{}'.format( (end-start) ) )
python多线程在微观上是串行的,因为 总线程数 * 运行时间 > 单线程运行时间
线程池设置得过大,线程切换导致的开销可能会抵消多线程带来的性能提升。
线程池的大小需要根据实际情况来确定,并没有确切的数据。