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()
运行效果是这样的
最后会把数据存进数据库