from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import re
import pymysql#为使用谷歌无界面浏览器设置参数
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')#定义连接mysql的函数
def connect_mysql():
con = pymysql.connect(host='127.0.0.1',port=3306,db='jd',user='root',password='123456',charset='utf8')
return con
#定义关闭mysql的函数
def close_mysql(db):
db.close()
#向mysql中保存数据
def save(db,d):
cursor = db.cursor()
sql = "insert into pinglunkc(time,content,reply,nice) values('%s','%s','%s','%s')" %(d['time'],d['content'],d['reply'],d['nice'])
cursor.execute(sql)
db.commit()
cursor.close()def create_soup(page,db):
#创建bs对象
soup = BeautifulSoup(page,'lxml')
#找到评论区域
lt = soup.select('.comments-item > .com-item-main')
print(len(lt))
d = {}
#遍历评论区,得到当前页的每一个评论
for message in lt:
#将信息存入字典中
d = {
'time':message.select('.time')[0].text,
'content':message.select('.desc')[0].text,
'reply':message.select('.reply')[0].text[3:-1],
'nice':message.select('.nice')[0].text[2:-1]
}
#调用save方法将字典中数据存入mysql中
save(db,d)def main():
#chromedriver.exe的地址
path = r'*********************************************************'
#创建操纵浏览器的对象
driver = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)
#使用模拟浏览器打开起始页
driver.get('https://item.jd.hk/1982079424.html')
time.sleep(5)
#找到评论的按钮
li = driver.find_elements_by_class_name('detail-elevator-handler')[2]
#将页面往下拉,防止懒加载的影响
js = 'document.documentElement.scrollTop=20000'
driver.execute_script(js)
time.sleep(2)
#连接数据库
db = connect_mysql()
#点击评论的按钮,打开评论区
li.click()
create_soup(driver.page_source,db)
time.sleep(2)#循环点击下一页,并得到本页的数据
while True:
try:
#找到下一页的按钮
am = driver.find_elements_by_link_text('下一页')[0]
except Exception as e:
#如果找不到下一页的按钮说明已经到头
#关闭数据库
close_mysql(db)
exit('结束下载')
#执行js中的代码,使页面向下,取消懒加载的影响
driver.execute_script(js)time.sleep(2)
#点击下一页的按钮
am.click()
time.sleep(2)create_soup(driver.page_source,db)
time.sleep(2)
#最后结束关闭浏览器
driver.quit()if __name__ == '__main__':
main()