您的位置:首页 > 编程语言 > Python开发

python 爬虫The One的 数据两种方式

2016-04-12 14:00 507 查看
系统: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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: