python爬虫——selenium爬取京东商品信息
2019-04-13 23:26
435 查看
版权声明:转载需注明来源 https://blog.csdn.net/weixin_44024393/article/details/89289694
1. 先看效果
2. 目标网站
3. 解析,首先找到输入框的id
4. 找到之后编写代码
# 获取输入框的id,并输入关键字python爬虫 browser.find_element_by_id('key').send_keys('python爬虫') # 输入回车进行搜索 browser.find_element_by_id('key').send_keys(Keys.ENTER)
5. 这样就再输入框中自动输入python爬虫关键字并搜索了,可以看到信息都在ul标签中,但是如果我们往下滚动,那么还会加载一部分的信息,所以我们要模拟滚动条往下拉
6. 模拟滚动条动作,可以看到,信息加载了很多,所以要模拟滚动条拉到下面,加载全部信息
# 将滚动条拉到最下面的位置,因为往下拉才能将这一页的商品信息全部加载出来 browser.execute_script('document.documentElement.scrollTop=10000')
7. 开始获取信息,代码如下
# 开始提取信息,找到ul标签下的全部li标签 lis = browser.find_elements_by_class_name('gl-item') # 遍历 for li in lis: # 名字 name = li.find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text # 价格 price = li.find_element_by_xpath('.//div[@class="p-price"]//i').text # 评论数 comment = li.find_elements_by_xpath('.//div[@class="p-commit"]//a') if comment: comment = comment[0].text else: comment = None # 商铺名字 shop_name = li.find_elements_by_class_name('J_im_icon') if shop_name: shop_name = shop_name[0].text else: shop_name = None # 商家类型 shop_type = li.find_elements_by_class_name('goods-icons') if shop_type: shop_type = shop_type[0].text else: shop_type = None # 声明一个字典存储数据 data_dict = {} data_dict['name'] = name data_dict['price'] = price data_dict['comment'] = comment data_dict['shop_name'] = shop_name data_dict['shop_type'] = shop_type data_list.append(data_dict) print(data_dict)
8. 其他需要注意的一些问题
9. 关于翻页的问题,我获取看最下面的下一页,不论我怎么试,都点击不了,也就是不能用selenium点击最下面的下一页进行翻页,所以我的方法的点击下图的下一页按钮实现翻页
10. 所以我就是获取这个元素再点击它实现翻页
#找到下一页的元素pn-next fp_next = browser.find_element_by_css_selector('a.fp-next') # 点击下一页 fp_next.click()
11. 最后就是当到了最后一页的时候,下一页的按钮是灰色的,也就是不能点击了,但是我们还是可以找到这个元素,所以我的想法是获取一共有多少页,然后循环这个次数就行
12. 完整代码附上
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import json import csv import random # 声明一个谷歌驱动器,并设置不加载图片,间接加快访问速度 options = webdriver.ChromeOptions() options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2}) browser = webdriver.Chrome(options=options) # url url = 'https://www.jd.com/' # 声明一个list,存储dict data_list = [] def start_spider(): # 请求url browser.get(url) # 获取输入框的id,并输入关键字python爬虫 browser.find_element_by_id('key').send_keys('python爬虫') # 输入回车进行搜索 browser.find_element_by_id('key').send_keys(Keys.ENTER)# 显示等待下一页的元素加载完成 WebDriverWait(browser, 1000).until( EC.presence_of_all_elements_located( (By.CLASS_NAME, 'pn-next') ) ) # 先获取一个有多少页 all_page = eval(browser.find_element_by_css_selector('span.p-skip em b').text) # 设置一个计数器 count = 0 # 无限循环 while True: try: count += 1 # 显示等待商品信息加载完成 WebDriverWait(browser, 1000).until( EC.presence_of_all_elements_located( (By.CLASS_NAME, 'gl-item') ) ) # 将滚动条拉到最下面的位置,因为往下拉才能将这一页的商品信息全部加载出来 browser.execute_script('document.documentElement.scrollTop=10000')# 随机延迟,等下元素全部刷新 time.sleep(random.randint(1, 3)) browser.execute_script('document.documentElement.scrollTop=0') # 开始提取信息,找到ul标签下的全部li标签 lis = browser.find_elements_by_class_name('gl-item') # 遍历 for li in lis: # 名字 name = li.find_element_by_xpath('.//div[@class="p-name p-name-type-2"]//em').text # 价格 price = li.find_element_by_xpath('.//div[@class="p-price"]//i').text # 评论数 comment = li.find_elements_by_xpath('.//div[@class="p-commit"]//a') if comment: comment = comment[0].text else: comment = None # 商铺名字 shop_name = li.find_elements_by_class_name('J_im_icon') if shop_name: shop_name = shop_name[0].text else: shop_name = None # 商家类型 shop_type = li.find_elements_by_class_name('goods-icons') if shop_type: shop_type = shop_type[0].text else: shop_type = None # 声明一个字典存储数据 data_dict = {} data_dict['name'] = name data_dict['price'] = price data_dict['comment'] = comment data_dict['shop_name'] = shop_name data_dict['shop_type'] = shop_type data_list.append(data_dict) print(data_dict)except Exception as e: continue # 如果count==all_page就退出循环 if count == all_page: break # 找到下一页的元素pn-next fp_next = browser.find_element_by_css_selector('a.fp-next') # 点击下一页 fp_next.click() def main(): start_spider() # 将数据写入jsonwenj with open('data_json.json', 'a+', encoding='utf-8') as f: json.dump(data_list, f, ensure_ascii=False, indent=4) print('json文件写入完成') with open('data_csv.csv', 'w', encoding='utf-8', newline='') as f: # 表头 title = data_list[0].keys() # 声明writer writer = csv.DictWriter(f, title) # 写入表头 writer.writeheader() # 批量写入数据 writer.writerows(data_list) print('csv文件写入完成') if __name__ == '__main__': main() # 退出浏览器 browser.quit()
相关文章推荐
- python爬虫——用selenium爬取京东商品信息
- python爬虫(三)selenium爬取京东商品信息
- Python+Selenium+Chrome抓取京东商品信息
- python爬虫——用selenium爬取淘宝商品信息
- python爬虫selenium+firefox抓取京东商品评论
- python爬虫实战(一)----------爬取京东商品信息
- Python爬虫二:抓取京东商品列表页面信息
- 利用Python爬虫爬取京东商品的简要信息
- Python爬虫 --爬取京东商品信息
- python爬虫之selenium+chrome 爬去淘宝商品信息
- python爬虫(7)——获取京东商品评论信息
- 利用Python爬虫爬取京东商品的简要信息
- 【Python】抓取京东列表页商品信息(selenium)
- 基于selenium和requests的京东商品信息和评论爬虫
- Python使用Selenium webdriver爬虫某电商商品数据
- <四>、python爬虫抓取购物网站商品信息--图片价格名称
- 用python编写的抓京东商品价格的爬虫
- Python爬虫(六)爬京东商品图片
- python3通过selenium爬虫获取到dj商品的实例代码
- python selenium实现下拉 爬取淘宝商品信息