python爬虫,数据存进数据库多页版

Python爬虫是一种通过编程自动化获取互联网上的信息的技术。它可以通过HTTP请求模拟网页访问、解析网页内容、提取所需数据等操作,快速从网页中抓取所需的数据。

数据指的是通过爬虫获取到的信息。爬虫可以帮助我们从网页中抓取到各种类型的数据,如文本、图片、视频、音频等。爬虫获取到的数据可以进一步用于数据分析、机器学习、数据挖掘等应用。

因此,Python爬虫是一种用于获取数据的技术,而数据则是爬虫获取到的信息的具体内容。

上一篇文章说到存储数据进数据库要注意的问题,这里就不多说了。

直接上代码

# coding: utf-8
import time
from typing import List, Tuple
import pymysql
from selenium import webdriver
from selenium.webdriver.common.by import By


KEY_WORD = input('请输入你想要获取商品数据: ')
PAGE_NUM = int(input('请输入需要爬取的页数:'))

def scrape_data(page_num: int) -> List[Tuple[str, str]]:
    # 创建浏览器对象
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    browser = webdriver.Chrome(options=options)
    browser.get("https://www.edianyun.com/index")
    browser.maximize_window()
    browser.find_element(By.CLASS_NAME, 'hsearch-text').send_keys(KEY_WORD)
    browser.find_element(By.CLASS_NAME, 'hsearch-but').click()
    time.sleep(3)
    chinese_names_list = []           # 定义一个空列表,用于存储中文商品名
    price_list = []           # 定义一个空列表,用于存储商品价格
    for i in range(page_num):
        chinese_names = browser.find_elements(By.XPATH, '/html/body/div[6]/div[2]/ul/li/a/h3')  # 定位中文商品名元素
        chinese_names_list += [i.text for i in chinese_names]                                                         # 将中文商品名添加到列表中
        price = browser.find_elements(By.XPATH, '/html/body/div[6]/div[2]/ul/li/a/div/span')          # 定位商品价格元素
        price_list += [i.text for i in price]                                                         # 将商品价格添加到列表中
        if i < page_num - 1:
            browser.find_element(By.CLASS_NAME, 'icon-page-right').click()          # 定位下一页按钮并点击
            time.sleep(2)
    browser.quit()
    return list(zip(chinese_names_list, price_list))            # 返回中文商品名,商品价格的元组列表


def connect_db() -> pymysql.Connection:
    # 连接数据库
    db = pymysql.connect(host='localhost', user='root', password='root', port=3306, db='test', charset='utf8')
    return db


def create_table(db: pymysql.Connection) -> None:
    # 创建表
    cursor = db.cursor()                  # 创建游标对象
    sql = """
        CREATE TABLE IF NOT EXISTS shangpin (
            chinese_names_list VARCHAR(255),
            price_list VARCHAR(255)
        ) CHARSET=utf8
    """
    cursor.execute(sql)                   # 执行SQL语句


def insert_data(db: pymysql.Connection, data_list: List[Tuple[str, str]]) -> None:
    # 插入数据
    cursor = db.cursor()
    sql = 'INSERT INTO shangpin (chinese_names_list, price_list) VALUES (%s, %s)'
    try:
        cursor.executemany(sql, data_list)
        db.commit()
        print("插入成功")
    except Exception as e:
        print("插入失败:", str(e))
        db.rollback()

if __name__ == '__main__':
    data_list = scrape_data(PAGE_NUM)
    db = connect_db()
    create_table(db)
    insert_data(db, data_list)
    db.close()

运行效果是这样的

最后会把数据存进数据库

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值