【实战】Python爬虫获取某电商网站的商品信息
基于的是selenium谷歌驱动程序的自动化模拟登录,爬取的数据可以根据用户自己的需求进行选择,比如:商品的类型(由于搜素引擎展示给用户的界面数据都是大同小异的)、需要爬取商品的页数,都由用户自己指定。注意:模拟登录采用的方式是用户扫码。爬取到的商品信息包括:商品的金额购买人数商铺地址商品名称商品图片Python爬虫源代码:"""导入需要用到的包"""import timefrom bs4 imp
·
基于的是selenium谷歌驱动程序的自动化模拟登录,爬取的数据可以根据用户自己的需求进行选择,比如:商品的类型(由于搜素引擎展示给用户的界面数据都是大同小异的)、需要爬取商品的页数,都由用户自己指定。
注意:模拟登录采用的方式是用户扫码。
爬取到的商品信息包括:
- 商品的金额
- 购买人数
- 商铺地址
- 商品名称
- 商品图片
Python爬虫源代码:
"""
导入需要用到的包
"""
import time
from bs4 import BeautifulSoup
from selenium import webdriver
# 浏览器等待
from selenium.webdriver.support.ui import WebDriverWait
from urllib.request import urlretrieve
import os
# 定义淘宝商品信息抓取类
class Taoabo_Info:
# 重写构造方法
def __init__(self):
# https://login.taobao.com/member/login.jhtml
url = ''
# 声明类属性
self.url = url
self.browser = webdriver.Chrome(executable_path='D:\pycodes\Crawler\chromedriver.exe')
self.wait = WebDriverWait(self.browser,10)
# 编辑淘宝数据抓取的函数逻辑
"""
1.登录淘宝
2.首页
3.指定商品的搜索信息
4.提取指定商品的金额、购买人数、商铺地址、商品名称、商品图片
"""
def login_info(self):
# 1.打开网页
self.browser.get(self.url)
# 2.通过扫码的形式去登录淘宝账号
if self.browser.find_element_by_xpath('//*[@id="login"]/div[1]/i'):
self.browser.find_element_by_xpath('//*[@id="login"]/div[1]/i').click()
# 让程序等待休眠5秒,通过手机扫码登录
time.sleep(8)
# 3.点击淘宝网首页
taobao_index = self.browser.find_element_by_xpath('//*[@id="J_SiteNavHome"]/div/a')
taobao_index.click()
time.sleep(1)
# 4.自动的在淘宝首页中输入自己想要搜索的商品名称,并且自动点击搜索
search_input = self.browser.find_element_by_xpath('//*[@id="q"]')
shop_name = input("请输入你想搜索的商品名称:")
search_input.send_keys(shop_name)
time.sleep(0.5)
search_submit = self.browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
search_submit.click()
# 5.获取商品信息
"""
先创建一个文件夹存储爬取的商品图片
"""
os.makedirs("imgs", exist_ok=True)
page = self.browser.page_source
soup = BeautifulSoup(page,'lxml')
shop_data_list = soup.find('div',class_='grid g-clearfix').find_all_next('div',class_='items')
# 二次提取:声明几个局部变量去临时存储商品数据
shop_name_list = []
shop_price_list = []
shop_people_list = []
shop_location_list = []
pic_name_list = []
# 商品的页面号
page_num = 1
total_num = int(input("你需要爬取商品的页数:"))
while page_num != total_num:
for shop_data in shop_data_list:
# 商品名称
shop_image_data = shop_data.find_all('div',class_='pic')
for shop_data_a in shop_image_data:
shop_data_a = shop_data_a.find_all('a',class_='pic-link J_ClickStat J_ItemPicA')
for shop_img in shop_data_a:
shop_name = shop_img.find_all('img')[0]['alt']
url = 'http:' + shop_img.find_all('img')[0]['data-src']
pic_name = url.split('/')[-1]
path = 'imgs\{}'.format(pic_name)
urlretrieve(url, path)
# 将商品名称和图片名存储在列表中
shop_name_list.append(shop_name)
pic_name_list.append(pic_name)
# 商品金额
shop_price_data = shop_data.find_all('div', class_='price g_price g_price-highlight')
for shop_price in shop_price_data:
shop_price_list.append(shop_price.text.strip())
# 购买人数
shop_people_number_data = shop_data.find_all('div','deal-cnt')
for shop_people_number in shop_people_number_data:
shop_people_list.append(shop_people_number.text)
# 店铺地区
shop_location_data = shop_data.find_all('div','location')
for shop_location in shop_location_data:
shop_location_list.append(shop_location.text)
page_num = page_num + 1
self.browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/ul/li[8]/a').click()
page = self.browser.page_source
soup = BeautifulSoup(page, 'lxml')
shop_data_list = soup.find('div', class_='grid g-clearfix').find_all_next('div', class_='items')
shop_data = zip(shop_name_list,shop_price_list,shop_people_list,shop_location_list,pic_name_list)
for data in shop_data:
print(data)
print(len(shop_name_list))
if __name__ == '__main__':
taobao = Taoabo_Info()
taobao.login_info()
数据展示——直接在控制台打印输出:
其中图片存储的地址是在同样路径下的imgs文件夹中。
笔者表示也很奇怪,为什么我输入的关键字【汽车】却推荐给我的都是二手车,可能淘宝内部的用户画像或者推荐系统计算得出笔者的经济能力有限,不足以购买更加优质的汽车吧。所以保存下来的图片都是一些旧二手车的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)