python爬虫入门 之 selenium 爬取京东的所有商品信息

此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。

该代码利用了selenium的webriver模块,如果要运行以下代码,还得下载以下的浏览器插件。
谷歌浏览器点击:http://npm.taobao.org/mirrors/chromedriver/
火狐浏览器点击:https://github.com/mozilla/geckodriver/releases
点击对应的超链接,找到对应自己浏览器版本的插件,然后将下载好的插件放到 python的安装路径下。
话不多说,直接上代码。有不清楚或不懂的可以在下方留言。

from selenium import webdriver
import time
import csv

class JdSpider(object):
    def __init__(self):
        self.url = 'https://www.jd.com/'          		  #设置url
        # 创建浏览器对象
        self.browser = webdriver.Chrome()           #设置浏览器

    # 打开某东,输入搜索内容,点击搜索
    def get_page(self):
        self.browser.get(self.url)
        self.browser.find_element_by_xpath('//*[@id="key"]').send_keys('爬虫书籍')  # 这里填写需要搜索的知识
        self.browser.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()   #执行点击 查询 按钮
        time.sleep(2)   #睡眠两秒让页面加载

    # 提取商品信息
    def parse_page(self):
        # 执行js脚本,把进度条拉到最底部
        self.browser.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)')
        # 加载网页的商品
        time.sleep(3)

        li_list = self.browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li')
        # li_list : [li节点1,li节点2,商品信息li]
        for li in li_list:
            product_list = li.text.split('\n')
            if product_list[0] == '单件':
                # 价格
                price = product_list[2]
                # 名字
                name = product_list[3]
                # 评论
                comment = product_list[4]
                # 商家
                market = product_list[5]
            else:
                # 价格
                price = product_list[0]
                # 名字
                name = product_list[1]
                # 评论
                comment = product_list[2]
                # 商家
                market = product_list[3]
            item=[price,market,name,comment]
            print([price,market,comment,name])
            with open('xxx.csv','a',encoding='utf-8') as f:
                writer = csv.writer(f)
                writer.writerow(item)

    def main(self):
        self.get_page()
        while True:
            self.parse_page()

            # 判断是否应该点击下一页
            if self.browser.page_source.find('pn-next disabled') == -1:
                self.browser.find_element_by_class_name('pn-next').click()
                time.sleep(2)
            else:
                break

if __name__ == '__main__':
    spider = JdSpider()
    spider.main()

内容引用于课堂,我做了一些注释整理,加了一个保存文件的步骤。

发布了34 篇原创文章 · 获赞 210 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45081575/article/details/97023841