python 使用模拟器 爬取京东一款游戏机所有的评论

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()

你可能感兴趣的:(python,爬虫)