使用selenium爬取京东商品搜索结果(名字、价格、评价数)
使用selenium爬取京东商品搜索结果(名字、价格、评价数)
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
一、环境
- Ubuntu18.04
- Python3
- PyCharm
- MySQL 5.7.29
- selenium、pyquery、json、time
- Chrome
二、项目解析
使用selenium需要等待所要元素加载完成,首先需要京东的搜索框加载完成。
# 等待搜索框加载完成
input_keys = wait.until(EC.presence_of_element_located((By.ID, 'key')))
打开京东搜索手机,观察到结果页面是分两次加载的,用循环体来多次将页面滑到底部,使其加载全部。
# 动态加载太多,多滚动几次
for i in range(2):
# 等待底部翻页栏加载完成
wait.until(EC.presence_of_element_located((By.ID, 'J_bottomPage')))
# 滚动条滚动到底部
browser.execute_script('window.scrollTo(0,10000)')
# 等待加载元素消失
wait.until_not(EC.presence_of_element_located((By.ID, 'J_scroll_loading')))
time.sleep(3)
当前页面的html
html = browser.page_source
查找需要元素
使用pyquery库解析
# 解析爬到页面的信息
def parse_jd_html(html):
# 商品在ul.gl-warp的li.item中
# 使用pyquery解析库解析
doc = PyQuery(html)
items = doc('ul.gl-warp li.gl-item').items()
for item in items:
yield {
'name': item.find('.p-name a em').text().strip(),
'price': item.find('.p-price strong i').text(),
'commit': item.find('.p-commit strong a').text()
}
将数据保存到数据库(填写正确数据库用户名、密码和数据库)
# 写入数据库
def write_to_mysql(item):
try