一.使用selenium模块进行天气网数据爬取
from selenium import webdriver
#调用selenium的webdriver模块
from selenium.webdriver.common.by import By
#调用by模块,定位web中的元素
import time
#延迟时间模块
from selenium.webdriver.common.keys import Keys
#防键盘输入模块
import pymysql
#链接pymysql模块
#数据库数据
'''
drop database if exists weather;
create database weather;
use weather;
create table wea(
农历 char(3) not null comment'农历' ,
阳历 char(3) not null comment'阳历',
温度 char(20) comment'温度',
湿度 char(4) comment'湿度',
数据来源 char(5) comment'数据来源'
);
'''
cnx = pymysql.connect(
host='127.0.0.1', #主机地址
user='root', #mysql用户名
password='123456', #mysql密码
port=3306, #mysql开放端口
db='weather' , #mysql创建的库名
charset='utf8',
)
cur = cnx.cursor()
#链接数据库,创建一个游标
inserts=[]
#创建一个列表,用来保存你所需要的数据
driver = webdriver.Edge()
#打开搜索引擎
#driver.maximize_window() 放大窗口
driver.get("https://www.baidu.com/")
#使用百度搜索
time.sleep(0.5)
#防止web元素没有加载出来,延迟0.5秒
driver.find_element(By.ID, "kw").send_keys("天气网"+Keys.ENTER)
#搜索天气网,使用keys模块输入
time.sleep(2)
wins = driver.window_handles
driver.switch_to.window(wins[-1])
#切换窗口,打开一个链接后,如果创建了一个新的图窗就必须切换窗口
driver.find_element(By.XPATH,"/html/body/div[3]/div[3]/div[1]/div[3]/div[3]/div[1]/div[1]/h3/a").click()
#根据元素寻找你要点击的部位,使用click仿用户点击
time.sleep(5)
wins = driver.window_handles
driver.switch_to.window(wins[-1])
driver.find_element(By.CLASS_NAME, "showCalendar").click()
#在天气网中点击地区
time.sleep(5)
wins = driver.window_handles
driver.switch_to.window(wins[-1])
time.sleep(5)
wins = driver.window_handles
driver.switch_to.window(wins[-1])
time.sleep(5)
tbody = driver.find_elements(By.TAG_NAME,"tbody")
#查找tboby元素
for trs in tbody:
#遍历tbody找出trs
for tds in trs.find_elements(By.TAG_NAME,"td"):
#遍历trs找出td元素
if tds.text != '':
#防止空数据输入
lines = tds.text.split('\n')
inserts.append(lines[:5])
#把需要的数据导入到inserts列表中
sql = "INSERT INTO wea (农历, 阳历, 温度, 湿度, 数据来源) VALUES (%s, %s, %s, %s, %s)"
#列好表格格式
cur.executemany(sql, inserts)
#批量导入
cnx.commit()
print("数据添加成功")
time.sleep(10)
cur.close()
cnx.close()
评论区