# 爬取糗百信息
import threading from queue import Queue import requests from lxml import etree import time # 最大开启采集线程数(并发数) concurrent = 3 # 解析并发数 conparse = 3 class Crawl(threading.Thread): def __init__(self,i,task_q,data_q): self.task_q = task_q self.data_q = data_q self.i = i super(Crawl, self).__init__() def run(self): print('%d号采集线程启动' % self.i) while not self.task_q.empty(): fullurl = self.task_q.get() response = requests.get(fullurl) if 200 <= response.status_code <= 300: html = response.text data_q.put(html) else: print('采集异常',response.status_code) time.sleep(1) print('%d号采集线程结束over' % self.i) class Parse(threading.Thread): def __init__(self,i,data_q,crawl_list): self.i = i self.data_q = data_q self.crawl_list = crawl_list self.is_parse = True super(Parse, self).__init__() def run(self): print('%d号解析线程开启' % self.i) # 判断是否结束解析线程条件 # 1.采集线程是否存活 # 2.数据队列是否为空 while True: for t in self.crawl_list: # 判断采集线程是否存活 if t.is_alive(): break else: if self.data_q.empty(): self.is_parse = False # 线程有存活的 if self.is_parse: try: html = self.data_q.get(timeout=3) self.parse(html) except Exception as e: pass else: break print('%d号解析线程结束' % self.i) # 解析页面 def parse(self,html): html = etree.HTML(html) nick = html.xpath('//h2/text()') print(nick) if __name__ == '__main__': # 任务队列 task_q = Queue() # 数据队列 data_q = Queue() base_url = 'https://www.qiushibaike.com/8hr/page/%d/' for i in range(1,13 + 1): fullurl = base_url % i task_q.put(fullurl) #创建采集线程 crawl_list = [] for i in range(1,concurrent + 1): t = Crawl(i,task_q,data_q) t.start() crawl_list.append(t) #创建解析线程 parse_list = [] for i in range(conparse): t = Parse(i,data_q,crawl_list) t.start() parse_list.append(t) # 阻塞主进程(等待采集和解析工作完毕) for t in crawl_list: t.join() for t in parse_list: t.join()
# 爬取结果如下:
C:\Users\cz\AppData\Local\Programs\Python\Python35\python.exe E:/Python/python爬虫/14.py 1号采集线程启动 2号采集线程启动 3号采集线程启动 0号解析线程开启 1号解析线程开启 2号解析线程开启 ['\n钻戒礼服和我的她\n', '\n蕾丝隐形船袜\n', '\n单身穷哥\n', '匿名用户', '\n流民不是流氓\n', '\n驯猴师\n', '\n半颗真心不喂狗\n', '\n吃了两碗又盛\n', '\n无^_^昵称\n', '\n佩基\n', '\n愛是寂寞撒的谎\n', '\n夕冬温存\n', '\n江关一叶秋\n', '\n野野这小孩很乖\n', '\n江南字子川。\n', '\n鲲鹏九天\n', '\n黄山小妖\n', '匿名用户', '\n安贤3\n', '\n陌上花还未开\n', '\n该用户已渡劫升仙\n', '\n愛是寂寞撒的谎\n', '匿名用户', '\n其实真不糗\n', '\n七良\n'] ['\n西湖醋鱼夹生\n', '\n吃了两碗又盛\n', '\n醉笑红尘济南\n', '\n只为你脱裤子\n', '\n礁石_\n', '\n吃了两碗又盛\n', '\n(驹迷)真的爱你\n', '\n婚纱摄影PS修图\n', '\n陈雪2\n', '\n偏执患者。\n', '\n樱落蝶舞\n', '\n星劫\n', '\n天若有情被抢了\n', '\n花七七…\n', '匿名用户', '\n调皮丫头长的美\n', '\n胡子灬哥\n', '匿名用户', '\n坦然平静\n', '\nMs小野猫\n', '\n逗逼模式已完成\n', '\n爱哭的瓶子\n', '\nYCCCCCaaa…\n', '\n夕冬温存\n', '匿名用户'] ['\n皇家御赐最佳官人\n', '\n道士下山会女神\n', '\n花七七…\n', '\n用尽一生的恨\n', '\n丙嘣\n', '\n愛是寂寞撒的谎\n', '\n驯猴师\n', '\n1飞翔的雄鹰\n', '\n白百丽儿\n', '\n糖太甜苦瓜太苦\n', '\n风吹屁股蛋子疼\n', '\n倾心倾情%%\n', '\n阳春佐罗\n', '\n周易师叔\n', '\n蜜姐店铺\n', '\n偷情贼\n', '\n花安静\n', '\n11鈫\n', '\n风吹屁股蛋子疼\n', '\n修心徒^^\n', '\n青刺莓\n', '\n吃货最怕饿梦.\n', '\n阿木963\n', '\n抱我51\n', '\n该用户已渡劫升仙\n'] ['匿名用户', '\n站上冰箱装高冷\n', '\n表姨父\n', '\n好吃的焦糖饼干………\n', '\n听雨ing\n', '\n墙交术之霉\n', '\n我是煮茶\n', '\n花七七…\n', '\n丫偷儿\n', '\n独宠丽妃\n', '\n吃了两碗又盛\n', '\n抱我51\n', '\n抒情式、情歌\n', '\n爱哭的瓶子\n', '\n婷婷依卓\n', '\n浅浅一笑恰逢你来\n', '\n胖香\n', '匿名用户', '匿名用户', '\n夜~方丈带队上青楼…\n', '匿名用户', '\n别动呗\n', '\n白百丽儿\n', '匿名用户', '\nCapricorn…\n'] ['\n在下&瞄人…\n', '\n孤心~魅影\n', '\n娇爷£\n', '\n加气混凝土移动师\n', '\n寂寞的烟0033\n', '\n我家熊孩子不熊\n', '\n赵赵赵小西\n', '\n随时离开\n', '\n林晓九的忧伤哥\n', '\n一个人擦擦地\n', '\n花美男MC\n', '\n好吃的焦糖饼干………\n', '\n下一站★改变\n', '\n璐璐℃\n', '\n梨花落尽柳花时\n', '\n愛是寂寞撒的谎\n', '\n跑呀!跑不掉了吧~…\n', '\n风拂轻尘\n', '\n緣來是伱\n', '\n坏坏好像不坏\n', '\n调皮丫头长的美\n', '\n兔子急了,还咬人\n', '\n向戴安澜将军致敬\n', '\n别回头,安好!\n', '\n哆啦A梦是我的\n'] ['匿名用户', '\n狸土豆大人\n', '\n神化坏宝宝\n', '\n剧本丶\n', '\n别给哥喝酒\n', '\n倾心倾情%%\n', '\n爱哭的瓶子\n', '\n向昨天说再见。\n', '\n生活生不易活更难\n', '\n流民不是流氓\n', '\n哎,吆,喂\n', '\n纳花\n', '\n饭岛爱相随\n', '\n雁塔留雁雁不落\n', '\n防护镜\n', '\n西门爬墙\n', '\n公众号:自察社\n', '\n星劫\n', '\n『Neng』\n', '\n忘记。。。…\n', '\n素·敵\n', '\n王云(笨笨)\n', '\n二女子、\n', '\n鱼七七…\n', '\n上凹下凸\n'] ['匿名用户', '\n偷惢\n', '\nA_宁静致远\n', '\n222/222\n', '\n留不住就放手吧\n', '\n◣听歌◥\n', '\n林晓九\n', '\n谁来装饰你的梦\n', '\n过夜的开水\n', '\n风丿行\n', '\n123开始猥琐\n', '\n傻妞也\n', '\n卖玫瑰的小男孩丶\n', '\n老刘忙_\n', '\n屋岩下的男孩\n', '\n偷惢\n', '\n王八与蛋\n', '\n天下第22帅他爸\n', '\n单身狗爱流浪猫\n', '\n绦子\n', '\n在下&瞄人…\n', '\n偷情贼\n', '\n酒中的痛\n', '\n遇到你是最美丽的意…\n', '\nQueroi\n'] ['\n城中小草\n', '\n沃土秋实\n', '\n鲲鹏九天\n', '\n十三年资深潜水员\n', '\n淡淡的稻花香2\n', '\n驯猴师\n', '\n小咪^\n', '\n周景全\n', '\n黄山小妖\n', '\n孤独与你°\n', '\n吃了两碗又盛\n', '\n守龛人\n', '\n不帅但很能干的人\n', '\n鲲鹏九天\n', '\nπ_π拈花\n', '\n寂寞真诚\n', '\n失伈疯。\n', '\n卟乖(>_&…\n', '\n花脚猫的花\n', '\n我叫小贵\n', '\n傻菲°\n', '\n王八与蛋\n', '匿名用户', '\n不是很帅但很能干\n', '\n瑜儿好想你\n'] ['\n夕冬温存\n', '\n小猪背起行囊\n', '\n你是俺di\n', '\n阿~塰\n', '\n琳妹儿(二)\n', '\n挖鼻孔的老虎\n', '\n把酒煮温\n', '\n该用户已渡劫升仙\n', '\n非法用户名zP9r…\n', '\n温柔小箭\n', '\n我是煮茶\n', '\n愛是寂寞撒的谎\n', '\n薄荷味白衬衫\\\\n…\n', '\n慕容语嫣~\n', '\n卖姑娘的大灰狼\n', '\n墙交术之霉\n', '\n愛是寂寞撒的谎\n', '\n富川人\n', '\n你家邻居叫马乐\n', '\n被抢糖吃de孩纸\n', '\n他城她梦丶\n', '\n悠悠我心*\n', '\n星劫\n', '\n驯猴师\n', '\n人送外号海伦子\n'] ['\n大道独行我为仙\n', '\nV根号三\n', '\n伊伊wan\n', '\n天若有情被抢了\n', '\n请叫我狂奔\n', '\n十里柔情一帘幽梦\n', '\n羊皮为裘\n', '\n倾心倾情%%\n', '\n偷惢\n', '\n爱吃面条的龟\n', '\ndarling-汉…\n', '\n鲲鹏九天\n', '\n不甜不要钱i\n', '\n这个冬天只要拥抱\n', '\n叫我阿道\n', '\n“孔夫子”\n', '\n樱落蝶舞\n', '\n丶彧言\n', '\n小风吹,彼岸花开\n', '\n挚爱一人为她撸\n', '\nA-Mr.G\n', '\n挖鼻孔的老虎\n', '\n好吃的焦糖饼干………\n', '\n加腾鹰的手指\n', '\n我是煮茶\n'] ['\n隔壁老王头儿66\n', '\n不帅但很能干的人\n', '\n消失在海里的鱼\n', '\n非法用户名kJ6G…\n', '\n实在不知道叫啥了\n', '\n素·敵\n', '\n偷情贼\n', '\n调皮的小汪汪\n', '\n秀气散发磊落光明\n', '\n道士下山会女神\n', '\n风吹屁股蛋子疼\n', '\n。地上一只鸭\n', '\n长风长醉\n', '\n迪丽冷九...\n', '\n石沐子\n', '\n樱落蝶舞\n', '\n星劫\n', '\n江哥007\n', '\nAiNuO\n', '\n自由之翼1314\n', '\n伺候不爽你弄死我\n', '\n鬼龙小爆\n', '\nif空空\n', '\n電动、小马达\n', '\n鑫酱就酱紫\n'] ['\n西帝君\n', '\n吃货最怕饿梦.\n', '\n放屁成个调\n', '\n爱哭的瓶子\n', '\n枯藤扯着老树\n', '\n沐莘\n', '\n墙交术之霉\n', '\n王云(笨笨)\n', '\n愿你快乐不要悲伤\n', '\n奇怪的地球人\n', '匿名用户', '\n小月团子\n', '\n小风吹,彼岸花开\n', '\n调皮的小汪汪\n', '\n坚挺的大香蕉呀\n', '\n大三学长\n', '\n退隐段子手\n', '\n.炒粉\n', '\n贪吃的加菲猫疯了\n', '\n文艺小榴芒\n', '\n小风吹,彼岸花开\n', '\n花凝雪\n', '\n我家有个彪娘们\n', '\n心里藏你的梦\n', '\n漠落\n'] 3号采集线程结束over 2号采集线程结束over ['匿名用户', '\nxzc454\n', '\n小时候可好咯\n', '\ncrazy土豆丝\n', '\n穿着棉袄吃冰棒\n', '\nDY交\n', '\n傻晴°\n', '\n春水无边\n', '\n么么么哒哒69\n', '\n叽喱咕噜︶\n', '\n星劫\n', '\n琦只~\n', '\n4+1=5\n', '\n挖鼻孔的老虎\n', '\n我真的屎匿名用户\n', '\n吃了两碗又盛\n', '\n傻月゛\n', '\n小心蛋毛\n', '匿名用户', '\n星星15\n', '\n驯猴师\n', '\n沐莘\n', '\n没有常的春藤\n', '\n不约而同丿\n', '\n不甜不要钱i\n'] 1号采集线程结束over 1号解析线程结束 2号解析线程结束 0号解析线程结束 Process finished with exit code 0
兄弟连学python
Python学习交流、资源共享群:563626388 QQ