Python爬⾍:爬取美团、⼤众点评、去哪⼉、驴妈妈⽹站评论信息
版权声明:本⽂为博主原创⽂章,欢迎转载,转载请注明出处! blog.csdn/qq_36743482/article/details/80884933
前些天接到需求,需要给客户爬取美团、⼤众点评、去哪⼉、驴妈妈等⽹站的景区和酒店的评价相关信息。虽然我是做数据库的,之前也没写过Python爬⾍,但只能硬着头发上。这⾥坐下简短的总结。
1 考虑爬取⽅式
最先考虑仅采取 webdriver + selenium 的⽅式爬取信息,但是考虑后续程序需要放在Linux服务器执⾏,所以转⽽采⽤
requests+beautifulsoup 的⽅式实现。
开发过程中,由于本⼈爬⾍和前端知识的⽋缺,最终采⽤两者的结合,⽽selenium可以通过headless的⽅式实现。
2 爬⾍思路
⽬前有许多爬⾍框架,我粗略的使⽤了以下思路实现增量爬取。
requests(selenium)爬取数据;
判断爬取的数据是否数据库中已存在;
保存在dataframe对象中;
插⼊到数据库中。
3 爬⾍之路
3.1 框架
编写爬⾍框架。因为第⼀次写爬⾍,把所有的⽅法都写在了同⼀个类中,但并不推荐这样写。
class NewsGain(object):
# 初始化
def __init__(self):
self.data = pd.DataFrame(columns = ["source","spot","time","userid","content","star"])
# 获取数据库连接对象
def con_mysql(self):
return db
unicode download myanmar
# 查询数据库的最新⽇期
def get_last_time(self,source,spot):
return time
#插⼊数据库Oracle
def inOrcl(self,data):
pass
#插⼊数据库Mysql
def inMysql(self,data):
pass
# 保存数据到data
def saveData(self, source, spot, time, userid, content, star):
pass
# Test 导出csv⽂件
def toCSV(self,data,charset = 'utf-8'):
pass
#新闻爬取⼊⼝
def startGain(self,url):
pass
pass
>>>>>>>###具体爬取⽹站>>>>>>>#
oracle数据库创建临时表# 美团⽹
def meituan(self, url):
pass
# ⼤众点评
def dazhong(self, url):
pass
def loginDianPing(self):
pass
# 驴妈妈
def lvmama(self, url):
pass
# 去哪⼉
def qunar(self, url):
pass
# 程序⼊⼝
if __name__ == "__main__":
# ⽬标爬取⽹站
sourcetUrl = []
# 获取爬取程序实例
newsGain = NewsGain()
# 爬取数据
for url in sourcetUrl:
newsGain.startGain(url)
newsGain.inMysql(newsGain.data)
3.2 丰富除爬取⽹站之外的具体函数
3.2.1 连接数据库对象
# 连接数据库
def con_mysql(self):
db = t('localhost','root','111111','arvin', charset='utf8')
return db
3.2.2 获取爬取开始时间
# 查询数据库的最新⽇期
vue图片懒加载的实现原理
def get_last_time(self,source,spot):
db = _mysql()
# 创建cursor游标对象
cursor = db.cursor()
row_1 = '0'
# 插⼊语句
sql = 'select max(comment_time) time from t_jiangsu_tourism_sight where source_web =%s and sight_name =%s'        try:
row_count = ute(sql,(source,spot))
row_1 = cursor.fetchone()[0]
#            print(row_count,row_1)
dbmit()
except Exception as e:
print(e)
# 关闭数据库连接
cursor.close()
db.close()
if row_1 is None:
row_1 = '0'
return row_1
3.2.3 插⼊数据库shelly 翻译
#插⼊数据库Oracle
def inOrcl(self,data):
# 将dataframe对象转化为list
L = np.array(data).tolist()
# 创建数据库连接
db = t('arvin', '111111', '127.0.0.1:1521/orcl')
# 创建游标对象
cursor = db.cursor()
# 插⼊语句
cursor.prepare('insert into test(source,spot,time,userid,content,star) values(:1,:2,:3,:4,:5,:6)')
# 批量插⼊
python解析json文件
# 提交事务
小程序开发开发dbmit()
db.close()
3.2.4 保存数据
3.2.5 导出csv ⽤于测试
3.3 具体爬取⽹站
3.3.1 美团
我们直接把连接放在FireFox⾥,就会返回Json格式数据。
通过该url我们可以看出传递的参数,poiId 景区;offset,偏移量;pageSize,页⾯⼤⼩;sortType,排序⽅式;
但是还有⼀个问题,下⼀页我们该如何实现呢?
其实很简单,只要我们把pageSize设置的⼤点即可,如1000,就可以返回所有的评论。并且把sortType设置为0,就是按照时间排序,所以,我们把url变为以下⽅式即可:接下来,我们直接解析这个Json对象的commentDTOList即可,如下图:
# 保存数据到data
def saveData(self, source, spot, time, userid, content, star):
index = self.data.shape[0]
self.data.at[index,'source'] = source
self.data.at[index,'spot'] = spot
self.data.at[index,'time'] = time
self.data.at[index,'userid'] = userid
self.data.at[index,'content'] = content        self.data.at[index,'star'] = star
# Test 导出csv ⽂件
def toCSV(self,data,charset = 'utf-8'):
try:
_csv('test.csv', index = False, encoding = charset)
except Exception as e:
pass
i.meituan/xiuxianyule/api/getCommentList?poiId=1262239&offset=0&pageSize=1000&sortType=0&mode=0&starRange=10%2C20%2C30
代码很简单,如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论