码迷,mamicode.com
首页 > 编程语言 > 详细

线程版的 多线程小爬虫 适合新手

时间:2018-05-12 21:41:39      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:try   tail   pack   5.0   mozilla   apple   exception   request   sleep   

mport threading, requests, time, re, os

"""
写个思路,把普通爬虫直接拉进来,但是全局变量不太清楚会造成什么样的影响
之前使用全局变量列表应该要分成两个,函数内部同名变量也互相不影响

但有个很大的问题,代码比较臃肿。无法将一个函数给两个线程同时使用
因为业务逻辑已经固定了,驾驶函数1和函数2同时从第一页开始爬取到的数据是没有差别的

所以我将一共五百页的东西分成1-250+和250+到500+两个循环
分别用函数1和函数2来执行

应该可以调用一个函数了,只需要定义两个列表,然后作为参数分别在调用函数的时候传入
get_pic_list()之内

"""
package_list = []
package_list2 = []
# 1.每页的url从1-531,使用for循环 拼接url
# 2.打开url之后,使用正则findall抓取该页的具体包链接 ,存入package_list


def get_pic_url(page,list):
try:
os.mkdir(str(page))
except Exception as e:
pass
head = {
‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36‘}
url = ‘http://www.doutula.com/article/list/?page={}‘.format(page)
res = requests.get(url,headers = head)
tmp = re.findall(r‘<a href="([^#].*?)" class=".*?">‘, res.text)
print(tmp)
list.extend(tmp)
# 3.使用for循环遍历package_list 作为picture_url
# 4.打开改url ,然后抓取url中的表情jpg,存入本地文件夹或者数据库
for pic_url in list:
if len(pic_url) != len(‘http://www.doutula.com/article/detail/1070805‘):
break
else:
res_pic = requests.get(pic_url,headers = head)
reg = r‘‘‘<img src="(.*?)" alt="(.*?)" .*?>‘‘‘
reg = re.compile(reg,re.S)
tmp = re.findall(reg,res_pic.text)

print(tmp)

for i in tmp:
num = tmp.index(i)
picture_res = requests.get(i[0],headers = head)
string = ‘‘
if picture_res:
tmp_str = i[1]
for each in tmp_str:
if each in (‘\\‘,‘/‘,‘*‘,‘?‘,‘"‘,‘|‘,‘>‘,‘<‘):
pass
else:
string = string + each
tmp_str = string
if tmp_str[-3:] == ‘jpg‘:
with open(r‘./{}/{}-{}{}.jpg‘.format(page,list.index(pic_url),num,tmp_str),‘wb‘) as f:
f.write(picture_res.content)
time.sleep(1)
else:
with open(r‘./{}/{}-{}{}.gif‘.format(page,list.index(pic_url),num,tmp_str),‘wb‘) as f:
f.write(picture_res.content)
time.sleep(1)
else:
break
list.clear()


def fun1():
for page in range(1,265): # 一共532
get_pic_url(page,package_list)


def fun2():
for page in range(265,532): # 一共532
get_pic_url(page,package_list2)

if __name__ == "__main__":

t1 = threading.Thread(target=fun1)
t2 = threading.Thread(target=fun2)

t1.start()
t2.start()

# 成功实现

线程版的 多线程小爬虫 适合新手

标签:try   tail   pack   5.0   mozilla   apple   exception   request   sleep   

原文地址:https://www.cnblogs.com/guducp/p/9029919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!