一、小tips
动态网站特征:反爬机制(禁止爬虫)
登录 验证码 ip限制 js加密 屏蔽…
解决办法:伪装浏览器 使用代理ip 抓包分析 selenium…
二、selenium
1.是一个用于Web应用程序测试的工具。直接运行在浏览器中,就像真正的用户在操作一样
2.环境配置:
①selenium工具,框架,第三方库:chomer.exe、geckodriver.exe
模拟用户操作浏览器,支持多个浏览器
②浏览器驱动:放置python目录下,不双击安装
目的 :抓取京东口罩数据
三、Steps
1.选择谷歌浏览器——2.输入京东网址——3.搜索关键字 ——4.点击回车
四、Code
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #此模块主要用于实现键盘按键操作
import time
#一、访问京东页面
def spider(url,keyword):
#选择谷歌浏览器
driver = webdriver.Chrome()
#输入京东网址
driver.get(url)
#selenium中的元素定位方式
input_tag=driver.find_element_by_id('key') #定位搜索框--输入关键字
input_tag.send_keys(keyword) #键盘模拟输入,输入关键字
input_tag.send_keys(Keys.ENTER)
time.sleep(5)#等5s
get_goods(driver) #抓取数据
# 二、定位商品数据抓取
def get_goods(driver):
#通过类名获取对象
goods=driver.find_elements_by_class_name('gl-item')#elements后面+s可以有多个
# print(goods)
for good in goods: #商品地址 名字 价格 评论
link =good.find_element_by_tag_name('a').get_attribute('href') #获取属性,定位到herf了
name =good.find_element_by_css_selector('.p-name em').text.replace('\n','') #获取商品名字,
price=good.find_element_by_css_selector('.p-price i').text #获取商品价格
commit=good.find_element_by_css_selector('.p-commit a').text #获取评论
#字符串格式化
msg='''
商品:%s
链接:%s
价格:%s
评论:%s
'''%(name,link,price,commit)
print(msg)
#三、获取多页数据
#采用字符串分页方式做到
button=driver.find_element_by_partial_link_text('下一页')#超链接上面的文本信息去定位元素
button.click() #点击
time.sleep(1)#不能点击太快
get_goods(driver) #循环调用
spider('https://www.jd.com/',keyword='口罩')
四、Bug:
1.invalid selector
问题:看到这一行→使用的是class_name,但是里面写的方法是用css选择器写的方法,要细心呀宝宝们!
到这里,我们就成功的掌握了使用selenium爬取京东电商数据的方法啦!宝贝们棒棒滴!