python 爬虫The One的 数据两种方式
系统:windows语言:python工具:pycharm需要的包:beautifulsoup、requests、pyquery安装以上的包,方法类似,手动方式任务:爬300条。采用多线程、非多线程单线程:import requestsimport bs4import timeimport reroot_url = 'http://wufazhuce
·
系统:windows
语言:python
工具:pycharm
需要的包:beautifulsoup、requests
安装以上的包,方法类似,
任务:爬300条。采用多线程、非多线程
单线程:
import requests
import bs4
import time
import re
root_url = 'http://wufazhuce.com'
def get_url(num):
return root_url + '/one/' + str(num)
def get_data(url):
response = requests.get(url)
soup = bs4.BeautifulSoup(response.text, "html.parser")
try:
for meta in soup.select('div'):
if meta['class'][0] == 'one-cita':
str = meta.string
except:
a = 1
finally:
b = 2
soup.div['class'] = "one-cita"
# 获取编号
strNum = soup.head.title.contents[0][4:8]
print(strNum)
patt = re.compile(r'^[\d\s]{1,7}$', re.I|re.U|re.X)
# 判断strNum是否为数字
if patt.match(strNum):
# 获取文字内容
strContent = str.strip()
print(strContent)
f=open('f.txt','a',encoding='utf-8')
f.write(strNum)
f.write(':')
f.write(strContent)
f.write('\n')
f.close()
if __name__ == '__main__':
start = time.time()
for i in range(300):
get_data(get_url(1000+i))
end = time.time()
print('use: %.2f s' % (end - start))
多线程:四个线程,一般电脑四核。
from multiprocessing import Pool
import os
import requests
import bs4
import time
import re
root_url = 'http://wufazhuce.com'
def get_url(num):
return root_url + '/one/' + str(num)
def get_data(url):
response = requests.get(url)
soup = bs4.BeautifulSoup(response.text, "html.parser")
try:
for meta in soup.select('div'):
if meta['class'][0] == 'one-cita':
str = meta.string
except:
a = 1
finally:
b = 2
soup.div['class'] = "one-cita"
# 获取编号
strNum = soup.head.title.contents[0][4:8]
print(strNum)
patt = re.compile(r'^[\d\s]{1,7}$', re.I|re.U|re.X)
# 判断strNum是否为数字
if patt.match(strNum):
# 获取文字内容
strContent = str.strip()
print(strContent)
# 打开文件
f=open('aaa.txt','a',encoding='utf-8')
f.write(strNum)
f.write(':')
f.write(strContent)
f.write('\n')
f.close()
def long_time_task(num):
i= num * 75
while i <= 75 * (num + 1):
get_data(get_url(1000+i))
i += 1
if __name__=='__main__':
start = time.time()
print('Parent process %s.' % os.getpid())
p = Pool(4)
for i in range(4):
p.apply_async(long_time_task, args=(i,))
print('Waiting for all subprocesses done...')
p.close()
p.join()
end = time.time()
print('use: %.2f s' % (end - start))
print('All subprocesses done.')
执行时间比较:
单线程:
一辈子,有多少真心话,是以玩笑的方式说了出去? by 佚名
1269
很想打一个不说话的电话,只要你在电话那端,我可以枕着电话筒就好。 from 《蒙马特遗书》
1276
自以为用这颗小小的心脏包裹住了波澜壮阔,给这片山川湖海围上了栅栏,不放出那匹脱缰野马,这样就不会有人从我假意的冷淡里,拎出些滚烫的秘密。 by 陈大力
use: 331.22 s
多线程:
一辈子,有多少真心话,是以玩笑的方式说了出去? by 佚名
1269
很想打一个不说话的电话,只要你在电话那端,我可以枕着电话筒就好。 from 《蒙马特遗书》
1276
自以为用这颗小小的心脏包裹住了波澜壮阔,给这片山川湖海围上了栅栏,不放出那匹脱缰野马,这样就不会有人从我假意的冷淡里,拎出些滚烫的秘密。 by 陈大力
use: 81.81 s
All subprocesses done.
更多推荐
已为社区贡献1条内容
所有评论(0)