cndotaercrazybm 2021-06-19 09:29 采纳率: 85.7%
浏览 75
已采纳

爬取京东商品查询并保存至数据库,昨天还可以用,今天就gg了,把存储部分删除发现就能顺利执行,求解

直接上代码
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素
import time
import pymysql


def get_goods(driver):
    try:
        goods=driver.find_elements_by_class_name('gl-item')

        for good in goods:
            detail_url=good.find_element_by_tag_name('a').get_attribute('href')
            p_name=good.find_element_by_css_selector('.p-name em').text.replace('\n','')
            price=good.find_element_by_css_selector('.p-price i').text
            p_commit=good.find_element_by_css_selector('.p-commit a').text
            msg = '''
            商品 : %s
            链接 : %s
            价钱 :%s
            评论 :%s
            ''' % (p_name,detail_url,price,p_commit)
            sku = "'" + p_name + "'"
            url = "'" + detail_url + "'"
            price = "'" + price + "'"
            commit = "'" + p_commit + "'"
            print(msg,end='\n\n')
            # print(datalist)
            sql = "insert into product()value(" + sku + ','+ price + ','+ commit + ',' + url + ",)";
            connect()  # 连接数据库,嵌套函数
            insert_or_update(sql)  # 插入数据
        button=driver.find_element_by_partial_link_text('下一页')
        button.click()
        time.sleep(1)
        get_goods(driver)
    except Exception:
        pass

def connect():#定义数据库连接
    return pymysql.connect(
        host='127.0.0.1',#主机号
        user='root',#用户
        password='root',#数据库密码
        database='jd_db',#数据库名
        port=3306,#端口号
        charset='utf8'#字符集
    )

def insert_or_update(sql):#定义数据库插入
    con = connect()#开启连接
    cursor = con.cursor()#获取游标
    cursor.execute(sql)#执行sql语句
    con.commit()#确认操作
    cursor.close()#关闭游标
    con.close()#关闭连接

def spider(url,keyword):
    driver = webdriver.Chrome()
    driver.get(url)
    driver.implicitly_wait(3)  # 使用隐式等待
    try:
        input_tag=driver.find_element_by_id('key')
        input_tag.send_keys(keyword)
        input_tag.send_keys(Keys.ENTER)
        get_goods(driver)
    finally:
        driver.close()


if __name__ == '__main__':
    spider('https://www.jd.com/',keyword='显卡3080')
  • 写回答

5条回答 默认 最新

  • 江天暮雪丨 2021-06-19 11:12
    关注

    sql = "insert into product()value(" + sku + ','+ price + ','+ commit + ',' + url + ",)";

    你的sql有问题啊

    数据库不封装,硬插入可太难受了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计