【pyhon】理想论坛单帖爬虫取得信息存入MySql数据库
代码:
- # 单帖爬虫,用于爬取理想论坛单个帖子得到发帖人,发帖时间和回帖时间并存入数据库,url例子见main函数
- from bs4 import BeautifulSoup
- import requests
- import threading
- import re
- import pymysql
- 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(len(arr))
- arrLength=len(arr)
- if arrLength==7:
- info={'楼层':arr[1],
- '作者':arr[2].replace('只看:',''),
- '日期':arr[4],
- '时间':arr[5]}
- self.infos.append(info);
- elif arrLength==8:
- info={'楼层':arr[1],
- '作者':arr[2].replace('只看:',''),
- '日期':arr[5],
- '时间':arr[6]}
- 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('\n')
- for key in info:
- print(key+":"+info[key])
- print("线程"+self.name+'打印结束.')
- insertDB(self.infos)
- except Exception as e:
- print("线程"+self.name+"发生异常。重新爬行")# 不管怎么出现的异常,就让它一直爬到底
- print(e);
- continue
- # 数据库插值
- def insertDB(infos):
- conn=pymysql.connect(host=',db='test',charset='utf8')
- for info in infos:
- sql="insert into test.topic(floor,author,tdate,ttime) values ('"+info['楼层']+"','"+info['作者']+"','"+info['日期']+"','"+info['时间']+"'"+")"
- print(sql)
- conn.query(sql)
- conn.commit()# 写操作之后commit不可少
- conn.close()
- # 入口函数
- 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:\Users\horn1\Desktop\python\15>python topicCrawler.py
- 线程crawler01开始爬取页面http://www.55188.com/thread-8319519-1-1.html
- C:\Users\horn1\AppData\Local\Programs\Python\Python36\lib\site-packages\bs4\__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
- 时间:10:59
- 楼层:9楼
- 作者:一赚
- 日期:2018-3-30
- 时间:11:01
- 楼层:10楼
- 作者:叼叼狼
- 日期:2018-3-30
- 时间:11:25
- 楼层:11楼
- 作者:酷我行
- 日期:2018-3-30
- 时间:11:40
- 楼层:12楼
- 作者:马泰的哥们
- 日期:2018-3-30
- 时间:11:48
- 楼层:13楼
- 作者:马泰的哥们
- 日期:2018-3-30
- 时间:11:49
- 楼层:14楼
- 作者:生活如愿
- 日期:2018-3-30
- 时间:11:55
- 楼层:15楼
- 作者:小兵旨
- 日期:2018-3-30
- 时间:12:42
- 楼层:16楼
- 作者:李汶安
- 日期:2018-3-30
- 时间:12:50
- 楼层:17楼
- 作者:马泰的哥们
- 日期:2018-3-30
- 时间:13:46
- 楼层:18楼
- 作者:小兵旨
- 日期:2018-3-30
- 时间:13:49
- 楼层:19楼
- 作者:马泰的哥们
- 日期:2018-3-30
- 时间:14:02
- 楼层:20楼
- 作者:酷我行
- 日期:2018-3-30
- 时间:17:21
- 楼层:21楼
- 作者:酷我行
- 日期:2018-3-30
- 时间:17:24
- 楼层:22楼
- 作者:马泰的哥们
- 日期:2018-3-30
- 时间:17:30
- 楼层:23楼
- 作者:酷我行
- 日期:2018-3-30
- 时间:21:37
- 楼层:24楼
- 作者:马泰的哥们
- 日期:2018-3-30
- 时间:21:44
- 楼层: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
- 时间:03:01
- 楼层:38楼
- 作者:理想5e9a18
- 日期:2018-4-1
- 时间:03:04
- 楼层:39楼
- 作者:马泰的哥们
- 日期:2018-4-1
- 时间:03:05
- 楼层:40楼
- 作者:陈龙333
- 日期:2018-4-1
- 时间:03:05
- 楼层:41楼
- 作者:马泰的哥们
- 日期:2018-4-1
- 时间:03:08
- 楼层:42楼
- 作者:理想5e9a18
- 日期:2018-4-1
- 时间:03:10
- 楼层:43楼
- 作者:马泰的哥们
- 日期:2018-4-2
- 时间:09:30
- 楼层: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打印结束.
- insert into test.topic(floor,author,tdate,ttime) values ('楼主','马泰的哥们','2018-3-30','09:59')
- insert into test.topic(floor,author,tdate,ttime) values ('2楼','龙波2010','2018-3-30','10:00')
- insert into test.topic(floor,author,tdate,ttime) values ('3楼','吗日个边','2018-3-30','10:07')
- insert into test.topic(floor,author,tdate,ttime) values ('4楼','小兵旨','2018-3-30','10:30')
- insert into test.topic(floor,author,tdate,ttime) values ('5楼','勇儿马甲','2018-3-30','10:37')
- insert into test.topic(floor,author,tdate,ttime) values ('6楼','培训资料','2018-3-30','10:43')
- insert into test.topic(floor,author,tdate,ttime) values ('7楼','短线冲','2018-3-30','10:56')
- insert into test.topic(floor,author,tdate,ttime) values ('8楼','马泰的哥们','2018-3-30','10:59')
- insert into test.topic(floor,author,tdate,ttime) values ('9楼','一赚','2018-3-30','11:01')
- insert into test.topic(floor,author,tdate,ttime) values ('10楼','叼叼狼','2018-3-30','11:25')
- insert into test.topic(floor,author,tdate,ttime) values ('11楼','酷我行','2018-3-30','11:40')
- insert into test.topic(floor,author,tdate,ttime) values ('12楼','马泰的哥们','2018-3-30','11:48')
- insert into test.topic(floor,author,tdate,ttime) values ('13楼','马泰的哥们','2018-3-30','11:49')
- insert into test.topic(floor,author,tdate,ttime) values ('14楼','生活如愿','2018-3-30','11:55')
- insert into test.topic(floor,author,tdate,ttime) values ('15楼','小兵旨','2018-3-30','12:42')
- insert into test.topic(floor,author,tdate,ttime) values ('16楼','李汶安','2018-3-30','12:50')
- insert into test.topic(floor,author,tdate,ttime) values ('17楼','马泰的哥们','2018-3-30','13:46')
- insert into test.topic(floor,author,tdate,ttime) values ('18楼','小兵旨','2018-3-30','13:49')
- insert into test.topic(floor,author,tdate,ttime) values ('19楼','马泰的哥们','2018-3-30','14:02')
- insert into test.topic(floor,author,tdate,ttime) values ('20楼','酷我行','2018-3-30','17:21')
- insert into test.topic(floor,author,tdate,ttime) values ('21楼','酷我行','2018-3-30','17:24')
- insert into test.topic(floor,author,tdate,ttime) values ('22楼','马泰的哥们','2018-3-30','17:30')
- insert into test.topic(floor,author,tdate,ttime) values ('23楼','酷我行','2018-3-30','21:37')
- insert into test.topic(floor,author,tdate,ttime) values ('24楼','马泰的哥们','2018-3-30','21:44')
- insert into test.topic(floor,author,tdate,ttime) values ('25楼','破局','2018-3-30','21:50')
- insert into test.topic(floor,author,tdate,ttime) values ('26楼','小中大学生','2018-3-31','00:27')
- insert into test.topic(floor,author,tdate,ttime) values ('27楼','理想5e9a18','2018-3-31','00:57')
- insert into test.topic(floor,author,tdate,ttime) values ('28楼','龍樹','2018-3-31','06:29')
- insert into test.topic(floor,author,tdate,ttime) values ('29楼','生活如愿','2018-3-31','07:49')
- insert into test.topic(floor,author,tdate,ttime) values ('30楼','胶东判官','2018-3-31','12:32')
- insert into test.topic(floor,author,tdate,ttime) values ('31楼','胶东判官','2018-3-31','12:32')
- insert into test.topic(floor,author,tdate,ttime) values ('32楼','天上下鱼','2018-3-31','13:04')
- insert into test.topic(floor,author,tdate,ttime) values ('33楼','天上下鱼','2018-3-31','13:05')
- insert into test.topic(floor,author,tdate,ttime) values ('34楼','股市小小手','2018-3-31','14:48')
- insert into test.topic(floor,author,tdate,ttime) values ('35楼','股市小小手','2018-3-31','14:50')
- insert into test.topic(floor,author,tdate,ttime) values ('36楼','逍遥茶','2018-3-31','15:45')
- insert into test.topic(floor,author,tdate,ttime) values ('37楼','马泰的哥们','2018-4-1','03:01')
- insert into test.topic(floor,author,tdate,ttime) values ('38楼','理想5e9a18','2018-4-1','03:04')
- insert into test.topic(floor,author,tdate,ttime) values ('39楼','马泰的哥们','2018-4-1','03:05')
- insert into test.topic(floor,author,tdate,ttime) values ('40楼','陈龙333','2018-4-1','03:05')
- insert into test.topic(floor,author,tdate,ttime) values ('41楼','马泰的哥们','2018-4-1','03:08')
- insert into test.topic(floor,author,tdate,ttime) values ('42楼','理想5e9a18','2018-4-1','03:10')
- insert into test.topic(floor,author,tdate,ttime) values ('43楼','马泰的哥们','2018-4-2','09:30')
- insert into test.topic(floor,author,tdate,ttime) values ('44楼','理想5e9a18','2018-4-2','11:18')
- insert into test.topic(floor,author,tdate,ttime) values ('45楼','马泰效应','2018-4-4','03:00')
- insert into test.topic(floor,author,tdate,ttime) values ('46楼','马泰效应','2018-4-4','03:00')
- insert into test.topic(floor,author,tdate,ttime) values ('47楼','韭菜008','2018-4-4','08:08')
数据库中数据:
【pyhon】理想论坛单帖爬虫取得信息存入MySql数据库的更多相关文章
- 【Python】爬取理想论坛单帖爬虫
代码: # 单帖爬虫,用于爬取理想论坛帖子得到发帖人,发帖时间和回帖时间,url例子见main函数 from bs4 import BeautifulSoup import requests impo ...
- 【nodejs】理想论坛帖子下载爬虫1.08
//====================================================== // 理想论坛帖子下载爬虫1.09 // 使用断点续传模式,因为网络传输会因各种原因中 ...
- 【nodejs】理想论坛帖子下载爬虫1.07 使用request模块后稳定多了
在1.06版本时,访问网页采用的时http.request,但调用次数多以后就问题来了. 寻找别的方案时看到了https://cnodejs.org/topic/53142ef833dbcb076d0 ...
- 【nodejs】理想论坛帖子下载爬虫1.06
//====================================================== // 理想论坛帖子下载爬虫1.06 // 循环改成了递归,但最多下载千余文件就崩了 / ...
- 【Nodejs】理想论坛帖子下载爬虫1.04
一直想做一个能把理想论坛指定页范围的帖子都能完整下载下来的爬虫,但未能如愿. 主要的障碍在并发数的控制和长时间任务的突然退出,比如想下载前五页的帖子,分析后可得到大约15000个主贴或子贴,如果用回调 ...
- 【Python】理想论坛帖子读取爬虫1.04版
1.01-1.03版本都有多线程争抢DB的问题,线程数一多问题就严重了. 这个版本把各线程要添加数据的SQL放到数组里,等最后一次性完成,这样就好些了.但乱码问题和未全部完成即退出现象还在,而且速度上 ...
- Python scrapy爬虫数据保存到MySQL数据库
除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...
- Hive学习之路 (三)Hive元数据信息对应MySQL数据库表
概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理.上一篇hive的安装也是将元数据信息存放在MySQL数据库中. Hive的元数据信息在MySQL数据中有57 ...
- Hive(三)Hive元数据信息对应MySQL数据库表
概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理.上一篇hive的安装也是将元数据信息存放在MySQL数据库中. Hive的元数据信息在MySQL数据中有57 ...
随机推荐
- ACID数据库事务正确执行的四个基本要素的缩写
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- Scrapy基础------css选择器基础
基本语法: * 选择所有节点 #container 选择id为container的节点 .container 选择所有class包含container的节点 li a 选取所有li 下所有a节点 ul ...
- Spring 什么是 IOC 控制反转 ?什么是依赖注入?spring的用处 好处 为什么要用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha Spring是一个开源的控制反转(Inversion of Control ,IoC)和 ...
- 关于那些oj链接
luogu codeforces bzoj poj tyvj
- python开发_os.path
在python中,os.path模块在处理路径的时候非常有用 下面是我做的demo 运行效果: ========================================= 代码部分: ==== ...
- Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam dp
B. Before an Exam 题目连接: http://www.codeforces.com/contest/4/problem/B Description Tomorrow Peter has ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- 2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
基爷与加法等式 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Desc ...
- python 用gensim进行文本相似度分析
http://blog.csdn.net/chencheng126/article/details/50070021 参考于这个博主的博文. 原理 1.文本相似度计算的需求始于搜索引擎. 搜索引擎需要 ...
- Java代码优化方案 J2ME内存优化
Java代码优化方案 J2ME内存优化 从几本书上,N个网站上整理的一些JAVA代码优化方案,最近的项目只有1M内存可用,必须很抠门了~J2ME项目更要注意的 避免内存溢出 l 不用的对象释放(置空) ...