简单说明
使用selenium实现京东商城的商品查找,同时获取每个商品的价格、评论、店铺名称、详情链接、图片链接、标题信息,存入Mongodb数据库当中,以口红为例子。
使用工具和模块安装
- selenium: pip install selenium -i https://pypi.douban.com/simple
- lxml: pip install lxml -i https://pypi.douban.com/simple
- pymongo: pip install pymongo -i https://pypi.douban.com/simple
- time
- 谷歌驱动要下载自己电脑上相匹配的驱动器
- Mongodb数据库安装-----不细讲 下载模块时,最好加上镜像源。
实现步骤分析
- 使用selenium模拟登录京东界面,输入关键次,跳转到相应商品页面。
- 获取网页源代码,对页面进行解析,使用lxml,输出结果如下:
- 想要获取多页的数据,这里定义p和page(想要获取的页数,不超过最大页数)进行比较来实现,同时还要实现自动点击下一页的功能。
- 将结果保存到Mongodb数据库中
相关代码
#爬取京东口红店铺数据
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from time import sleep
from lxml import etree
from pymongo import MongoClient
class JdKouHong:
def __init__(self):
self.url = 'https://www.jd.com/'
self.p=1
self.page=0
#打开界面
def open_html(self):
self.driver=webdriver.Chrome()
self.driver.get(self.url)
#停顿
self.wait = WebDriverWait(self.driver, 10)
#滑动
def main(self,key):
self.wait.until(EC.presence_of_element_located((By.ID, 'key'))).send_keys(key)
self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'button'))).click()
# all_count= browser.find_element_by_xpath('//span[@class="p-skip"]/em/b').text#找到当前商品的最大页数
# print('一共有{}页'.format(all_count))
# 输入想要获取到的页数,不超过最大页码数
self.page = eval(input('输入页码:'))
self.roll()
#页面下拉
def roll(self):
# 滚动 0 表示页顶 10000表示页底,执行js代码,同时设置一定的停顿时间
js = "var q=document.documentElement.scrollTop=5000"
self.driver.execute_script(js)
sleep(3)
js2 = "var q=document.documentElement.scrollTop=10000"
self.driver.execute_script(js2)
sleep(8)
self.html =self.driver.page_source # 获取源网页代码
#对源代码进行解析
self.get_content(self.html)
sleep(2)
#想要获取多少页进行判断
def clik(self):
if self.p < self.page:
self.p += 1
print("正在获取第%s页" % self.p)
self.next_page()
#解析源代码
def get_content(self,htmll):
# 解析源代码(获取价格、评论、店铺名称、详情链接、图片链接、标题)
self.save_data=[]
htmll = etree.HTML(htmll) #
source = htmll.xpath('//div[@class="gl-i-wrap"]')
# 循环每一个li标签,获取值
for i in range(len(source)):
D = {}
D['价格'] = htmll.xpath('//div[@class="p-price"]/strong/i/text()')[i]
# 获取评论数量
D['评论'] = htmll.xpath('//div[@class="p-commit"]/strong/a/text()')[i]
# 获取店铺名称
try:
shop = htmll.xpath('//div[@class="p-shop"]/span/a/text()')[i]
D['店铺名称'] = shop
except:
D['店铺名称'] = 'None'
# 获取详情页链接
D['详情链接'] = 'https:' + htmll.xpath('//div[@class="p-commit"]/strong/a')[i].get('href')
# 获取标题
D['标题'] = htmll.xpath('//div[@class="p-name p-name-type-2"]/a/em')[i].xpath('string(.)').strip()
# 获取图片链接(观察获取到源代码,与网页中源代码有区别,进行判断)
image_url = htmll.xpath('div[@class="p-img"]/a/img')[i].get('data-lazy-img')
if image_url == 'done':
image_urll = 'https:' + htmll.xpath('//div[@class="p-img"]/a/img')[i].get('src')
D['图片链接'] = image_urll
else:
D['图片链接'] = 'https:' + image_url
print(D)
self.save_data.append(D)
# print('页面总数为为:{}'.format(len(self.save_data)))
self.save_db()
self.clik()
# 保存数据到数据库当中
def save_db(self):
# 连接数据库
client = MongoClient()
# 创建数据库
database = client['kouhong']
# 创建集合
db = database['shop']
db.insert_many(self.save_data)
# 设置翻页动作,重复操作
def next_page(self):
self.driver.find_element(By.XPATH,'//*[@id="J_bottomPage"]/span[1]/a[9]').click() # 获取下一页按钮并点击
sleep(4)
self.roll()
# keys = input("请输入商品:")
# main(keys)
if __name__=='__main__':
mql=JdKouHong()
mql.open_html()
#t填入关键词
mql.main('口红')
结果截图
本文转载自: https://blog.csdn.net/Rebacca122222/article/details/124854154
版权归原作者 能变瘦的莫巧丽 所有, 如有侵权,请联系我们删除。
版权归原作者 能变瘦的莫巧丽 所有, 如有侵权,请联系我们删除。