## 大众点评评论爬虫脚本使用指南
### 爬取前的准备
- mysql数据库安装、打开服务
- 修改mysqls.py程序中数据库的用户名密码等,并创建对应的database和table,可以使用mysqls.creat_table()函数
- 登录大众点评官网,通过谷歌开发者工具等获取到当前的cookie,修改main.py中的cookie变量
- 查看爬取的店铺的店铺ID以及评论的页数,修改main.py 中对应的位置
- 如果有xuchuan.txt(保存当前点评爬取进度),请在爬取前删除(每换一个店铺要删除一次)
### 爬取过程中
- 由于大概每爬取100页左右,需要进行一次验证,当发现获取评论为0条或者异常时,请用浏览器打开点评页面,滑动滑块解锁,然后重启程序,有断点续传,不虚~
- 当更换店铺时,需要把店铺ID进行替换,还有评论的页数也要替换,还要删除xuchuan.txt
### 爬取结束后
数据存储于MYSQL数据库中,可以使用各种方法读取,啦啦啦啦~
1.安装Mysql,安装Navicat,创建数据库dianping。
2.封装操作数据库工具类
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 24 15:45:05 2018
@author: bin
"""
import pymysql
#连接MYSQL数据库
db = pymysql.connect("localhost","root","root","dianping" )
cursor = db.cursor()
#在数据库建表
def creat_table():
cursor.execute("DROP TABLE IF EXISTS DZDP")
sql = '''CREATE TABLE DZDP(
cus_id varchar(100),
comment_time varchar(55),
comment_star varchar(55),
cus_comment text(5000),
kouwei varchar(55),
huanjing varchar(55),
fuwu varchar(55),
shopID varchar(55)
);'''
cursor.execute(sql)
return
#存储爬取到的数据
def save_data(data_dict):
sql = '''INSERT INTO DZDP(cus_id,comment_time,comment_star,cus_comment,kouwei,huanjing,fuwu,shopID) VALUES(%s,%s,%s,%s,%s,%s,%s,%s)'''
value_tup = (data_dict['cus_id']
,data_dict['comment_time']
,data_dict['comment_star']
,data_dict['cus_comment']
,data_dict['kouwei']
,data_dict['huanjing']
,data_dict['fuwu']
,data_dict['shopID']
)
try:
cursor.execute(sql,value_tup)
db.commit()
except:
print('数据库写入失败')
return
#关闭数据库
def close_sql():
db.close()
3.创建表
creat_table()
4.在当前python文件同一个目录中创建proxies.txt,写入代理池,也可以自己手动创建搞个代理池,如果自己创建代理池,可参考CRAW_IP.py
CRAW_IP.py:
import requests
from bs4 import BeautifulSoup
import lxml
from multiprocessing import Process, Queue
import random
import json
import time
import requests
class Proxies(object):
"""docstring for Proxies"""
def __init__(self, page=3):
self.proxies = []
self.verify_pro = []
self.page = page
self.headers = {
'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8'
}
self.get_proxies()
self.get_proxies_nn()
def get_proxies(self):
page = random.randint(1, 10)
page_stop = page + self.page
while page < page_stop:
url = 'http://www.xicidaili.com/nt/%d' % page
html = requests.get(url, headers=self.headers).content
soup = BeautifulSoup(html, 'lxml')
ip_list = soup.find(id='ip_list')
for odd in ip_list.find_all(class_='odd'):
protocol = odd.find_all('td')[