代码:
# 单帖爬虫,用于爬取理想论坛帖子得到发帖人,发帖时间和回帖时间,url例子见main函数 from bs4 import BeautifulSoup import requests import threading import re user_agent='Mozilla/4.0 (compatible;MEIE 5.5;windows NT)' headers={'User-Agent':user_agent} # 帖子爬虫类(多线程) class topicCrawler(threading.Thread): def __init__(self,name,url): threading.Thread.__init__(self,name=name) self.name=name self.url=url self.infos=[] def run(self): while(self.url!="none"): print("线程"+self.name+"开始爬取页面"+self.url); try: rsp=requests.get(self.url,headers=headers) self.url="none"#用完之后置空,看下一页能否取到值 soup= BeautifulSoup(rsp.text,'html.parser',from_encoding='utf-8') #print(rsp.text); # rsp.text是全文 # 找出一页里每条发言 for divs in soup.find_all('div',class_="postinfo"): #print(divs.text) # divs.text包含作者和发帖时间的文字 # 用正则表达式将多个空白字符替换成一个空格 RE = re.compile(r'(s+)') line=RE.sub(" ",divs.text) arr=line.split(' ') #print('楼层='+arr[1]) #print('作者='+arr[2].replace('只看:','')) #print('日期='+arr[4]) #print('时间='+arr[5]) info={'楼层':arr[1], '作者':arr[2].replace('只看:',''), '日期':arr[4], '时间':arr[5]} self.infos.append(info); #找下一页所在地址 for pagesDiv in soup.find_all('div',class_="pages"): for strong in pagesDiv.find_all('strong'): print('当前为第'+strong.text+'页') # 找右边的兄弟节点 nextNode=strong.next_sibling if nextNode and nextNode.get("href"): # 右边的兄弟节点存在,且其有href属性 #print(nextNode.get("href")) self.url='http://www.55188.com/'+nextNode.get("href") if self.url!="none": print("有下一页,线程"+self.name+"前往下一页") continue else: print("无下一页,线程"+self.name+'爬取结束,开始打印...') for info in self.infos: print(' ') for key in info: print(key+":"+info[key]) print("线程"+self.name+'打印结束.') except Exception as e: print("线程"+self.name+"发生异常。重新爬行")# 不管怎么出现的异常,就让它一直爬到底 print(e); continue # 入口函数 def main(): #http://www.55188.com/thread-8205979-1-1.html #http://www.55188.com/thread-8324517-1-1.html #http://www.55188.com/thread-8205979-61-1.html url='http://www.55188.com/thread-8319519-1-1.html' tc=topicCrawler(name='crawler01',url=url) tc.start() # 开始 main()
输出:
C:Usershorn1Desktoppython14>python topicCrawler.py 线程crawler01开始爬取页面http://www.55188.com/thread-8319519-1-1.html C:Usershorn1AppDataLocalProgramsPythonPython36libsite-packagess4__init__.py:146: UserWarning: You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored. warnings.warn("You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.") 当前为第1页 当前为第1页 有下一页,线程crawler01前往下一页 线程crawler01开始爬取页面http://www.55188.com/thread-8319519-2-1.html 当前为第2页 当前为第2页 有下一页,线程crawler01前往下一页 线程crawler01开始爬取页面http://www.55188.com/thread-8319519-3-1.html 当前为第3页 当前为第3页 无下一页,线程crawler01爬取结束,开始打印... 楼层:楼主 作者:马泰的哥们 日期:2018-3-30 时间:09:59 楼层:2楼 作者:龙波2010 日期:2018-3-30 时间:10:00 楼层:3楼 作者:吗日个边 日期:2018-3-30 时间:10:07 楼层:4楼 作者:小兵旨 日期:2018-3-30 时间:10:30 楼层:5楼 作者:勇儿马甲 日期:2018-3-30 时间:10:37 楼层:6楼 作者:培训资料 日期:2018-3-30 时间:10:43 楼层:7楼 作者:短线冲 日期:2018-3-30 时间:10:56 楼层:8楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:9楼 作者:一赚 日期:2018-3-30 时间:11:01 楼层:10楼 作者:叼叼狼 日期:2018-3-30 时间:11:25 楼层:11楼 作者:酷我行 日期:2018-3-30 时间:11:40 楼层:12楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:13楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:14楼 作者:生活如愿 日期:2018-3-30 时间:11:55 楼层:15楼 作者:小兵旨 日期:2018-3-30 时间:12:42 楼层:16楼 作者:李汶安 日期:2018-3-30 时间:12:50 楼层:17楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:18楼 作者:小兵旨 日期:2018-3-30 时间:13:49 楼层:19楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:20楼 作者:酷我行 日期:2018-3-30 时间:17:21 楼层:21楼 作者:酷我行 日期:2018-3-30 时间:17:24 楼层:22楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:23楼 作者:酷我行 日期:2018-3-30 时间:21:37 楼层:24楼 作者:马泰的哥们 日期:发表于 时间:2018-3-30 楼层:25楼 作者:破局 日期:2018-3-30 时间:21:50 楼层:26楼 作者:小中大学生 日期:2018-3-31 时间:00:27 楼层:27楼 作者:理想5e9a18 日期:2018-3-31 时间:00:57 楼层:28楼 作者:龍樹 日期:2018-3-31 时间:06:29 楼层:29楼 作者:生活如愿 日期:2018-3-31 时间:07:49 楼层:30楼 作者:胶东判官 日期:2018-3-31 时间:12:32 楼层:31楼 作者:胶东判官 日期:2018-3-31 时间:12:32 楼层:32楼 作者:天上下鱼 日期:2018-3-31 时间:13:04 楼层:33楼 作者:天上下鱼 日期:2018-3-31 时间:13:05 楼层:34楼 作者:股市小小手 日期:2018-3-31 时间:14:48 楼层:35楼 作者:股市小小手 日期:2018-3-31 时间:14:50 楼层:36楼 作者:逍遥茶 日期:2018-3-31 时间:15:45 楼层:37楼 作者:马泰的哥们 日期:发表于 时间:2018-4-1 楼层:38楼 作者:理想5e9a18 日期:2018-4-1 时间:03:04 楼层:39楼 作者:马泰的哥们 日期:发表于 时间:2018-4-1 楼层:40楼 作者:陈龙333 日期:2018-4-1 时间:03:05 楼层:41楼 作者:马泰的哥们 日期:发表于 时间:2018-4-1 楼层:42楼 作者:理想5e9a18 日期:2018-4-1 时间:03:10 楼层:43楼 作者:马泰的哥们 日期:发表于 时间:2018-4-2 楼层:44楼 作者:理想5e9a18 日期:2018-4-2 时间:11:18 楼层:45楼 作者:马泰效应 日期:2018-4-4 时间:03:00 楼层:46楼 作者:马泰效应 日期:2018-4-4 时间:03:00 楼层:47楼 作者:韭菜008 日期:2018-4-4 时间:08:08 线程crawler01打印结束.
这个爬虫虽然简单,却是大计划中的一步。