用selenium爬取JD商品数据
selenium还是很强大的,不用去管网页源码,只要页面中存在元素,基本都能爬到,通过驱动的方式实现自动打开浏览器,怎么安装驱动可参考上一篇文章:https://blog.csdn.net/little_Muxue/article/details/123694820
(一)网页分析
通过开发者工具不难发现,每个商品数据都是保存在一个div标签中 紧接着就是去定位每一条数据的位置,比如价格数据,是保存在每一个div标签下的一个 i 标签中,其他的也是对应着相应的标签,就不一一列举了
(二)需求
把每一个商品的数据爬下来,保存到csv文件中
(三)代码实现
通过面向对象的行式,进行数据的爬取
from selenium import webdriver
import time
import csv
class JD(object):
def __init__(self):
self.data = []
self.head = ['价格', '书名', '出版单位', '评论数']
self.driver = webdriver.Chrome()
self.driver.get('https://www.jd.com/')
self.driver.implicitly_wait(2)
def parse_data(self):
self.driver.find_element_by_id('key').send_keys('大数据')
self.driver.find_element_by_class_name('button').click()
time.sleep(1)
self.driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(1)
li_list = self.driver.find_elements_by_xpath('//ul[contains(@class, "gl-warp")]/li')
for li in li_list:
item = {}
item['价格'] = li.find_element_by_xpath('.//div[@class="p-price"]/strong').text
item['书名'] = li.find_element_by_xpath('.//div[@class="p-name"]/a/em').text
try:
item['出版单位'] = li.find_element_by_xpath('.//div[@class="p-shopnum"]/a').text
item['评论数'] = li.find_element_by_xpath('.//div[@class="p-commit"]/strong/a').text
except:
item['出版单位'] = ''
item['评论数'] = ''
self.data.append(item)
self.save_data(item)
def save_data(self,lst):
with open('JD.csv','a',encoding='utf-8',newline='') as f:
DictWriter = csv.DictWriter(f,self.head)
DictWriter.writeheader()
DictWriter.writerow(lst)
def main(self):
self.parse_data()
if __name__ == '__main__':
jd = JD()
jd.main()
总结
这样功能就基本实现了,但是保存数据的时候有点问题,基础没学好,效果是这样的 还是得回去加强一下基础
|