引言
前几周在做c#大作业,做的是一个水果系统,需要一些水果的数据,于是就去爬取淘宝数据,可是爬下来总是空数据,不知道是怎么回事,于是我百度了一下说selenium可以实现,然后我就把selenium学习了下,编写了一个爬取淘宝商品的代码.
内容
代码是用的是selenium 里的 webdriver,通过webdriver可以自动帮我们打开谷歌浏览器,然后跳入到淘宝界面,然后登录,进行爬取。和以往的爬虫不一样的是我们不用再去封装头。而且我们还可在程序里封装想要爬取的内容,比如“水果”
具体代码意思都在注释,不懂可以看注释
代码
#-*- codeing = utf-8 -*-
#@Time : 2020/11/3 20:34
#@Author : 杨晓
#@File : Fruit.py
#@Software: PyCharm
from selenium import webdriver
import time
from pymysql import *
import re
#输入数据
def search_product(key):
#获得输入框并输入要搜索的关键字key
driver.find_element_by_id('q').send_keys(key)
#点击搜索按钮
driver.find_element_by_class_name("btn-search").click()
#窗口最大化
driver.maximize_window()
#休眠15s来登录淘宝账号
time.sleep(15)
#获得总页数
allPage = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text
#re.findall('(\d+)',allPage)返回一个列表元素
allPage = re.findall('(\d+)',allPage)[0]
return int(allPage)
# 获取数据
def get_product():
divs = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
for div in divs:
#获取元素信息
img = div.find_element_by_xpath('.//div[@class="pic"]/a/img').get_attribute('src')
title = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
price = div.find_element_by_xpath(".//strong").text
payNums = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text
save_data(title,img,price,payNums)
#保存数据
def save_data(title,img,price,payNums):
# 打开数据库连接(ip/数据库用户名/登录密码/数据库名)
con = connect("localhost", "root", "root", "pachong")
# 使用 cursor() 方法创建一个游标对象 cursor
cursors = con.cursor()
# 使用 execute() 方法执行 SQL 查询 返回的是你影响的行数
cursors.execute("insert into fruit values(%s,%s,%s,%s,%s)", (None, title, img, price,payNums))
# 使用 fetchone() 方法获取数据.
con.commit()
# 关闭数据库连接(别忘了)
con.close()
def main(keyWord):
#获得总共页数
allPage = search_product(keyWord)
currentPage = 1
while currentPage <= allPage:
print("第{}页数据".format(currentPage))
print("*****************************************")
driver.get("https://s.taobao.com/search?q={}&s={}".format(keyWord,(currentPage-1)*44))
driver.implicitly_wait(2) #浏览器等待方法
#driver.maximize_window()
get_product()
print("第{}页数据保存成功".format(currentPage))
currentPage += 1
print("*****************************************")
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get("https://s.taobao.com/")
main("水果")