爬虫学习日记:爬取京东网站商品评论的实例代码

爬取JD网站商品评论的实例代码

以爬取JD网站商品评论为例,并将实例代码附在下面,对于代码文末有逐行解释
代码:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
import csv
from lxml import etree

c = open("dytttest.csv", "w",encoding='utf-8',newline='')
writer = csv.writer(c)
writer.writerow(['星级','评价','评价时间'])

class JDSpider(object):
    driver_path=r"G:\chromedriver\chromedriver.exe"
    def __init__(self):
        self.driver=webdriver.Chrome(executable_path=JDSpider.driver_path)
        self.url="https://item.jd.com/30532212324.html"
    def run(self):
        self.driver.get(self.url)
        comment_button=self.driver.find_element_by_xpath(
            "//div[@id='detail']/div[1]/ul/li[5]")
        WebDriverWait(self.driver, 10).until(
            EC.presence_of_all_elements_located((By.XPATH, "//div[@id='detail']/div[1]/ul/li[5]")))
        self.driver.execute_script("arguments[0].click()", comment_button)
        while True:
            WebDriverWait(self.driver, 10).until(
                EC.presence_of_all_elements_located((By.XPATH, "//div[@id='comment-0']/div[12]/div/div/a[last()]")))
            source = self.driver.page_source
            self.parse_detail_page(source)
            next_button=self.driver.find_element_by_xpath("//div[@id='comment-0']/div[12]/div/div/a[last()]")
            if "ui-page-curr" in next_button.get_attribute("class"):
                break
            else:
                self.driver.execute_script("arguments[0].click()", next_button)
                time.sleep(2)
        self.driver.close()
    def parse_detail_page(self,source):
        html=etree.HTML(source)
        for i in range(0, 9):
            templist = []
            stars=html.xpath("//div[@id='comment-0']/div/div[2]/div[1]/@class")[i].replace("comment-star ","")
            templist.append(stars)
            contain=html.xpath("//div[@id='comment-0']/div/div[2]/p")[i]
            contain1=str(contain.xpath("./text()")).replace("[","").replace("]","").replace(",","").replace(" ","").replace("'","")
            templist.append(contain1)
            times=html.xpath("//div[@id='comment-0']/div/div[2]/div/div[1]/span[5]/text()")[i]
            templist.append(times)
            position={"stars":stars,"contain":contain1,"time":times}
            writer.writerow(templist)
            print(position)

if __name__ == '__main__':
    JD=JDSpider()
    JD.run()

c.close()

通过运行如上代码,可以得到运行结果:
在这里插入图片描述
以及相对应的csv文件:
在这里插入图片描述
如上图,我们成功爬取到商品的好评星数、评论内容、评论时间,并生成了相对应的csv文件。
代码分析:
(1)1~4行
导入selenium组件的webdriver自动测试工具。
(2)5~6行
导入time包,csv包
(3)第7行
etree.HTML()方法可以用来解析字符串格式的HTML文档对象,使用xpath()方法获取html
(4)9~11行
打开test.csv文件,并注入标题
(5)第13行
定义JDSpider类,并定义 __init__和run 方法
(6)第14行
确定chromedriver.exe浏览器内核驱动的路径
(7)15~17行
驱动chromedriver打开指定的网页
(8)18~36行
模拟人的点击行为,打开商品评论界面,并点击下一页。在循环点击下一页的时候,调用parse_detail_page方法,爬取指定的信息
(9)37~50行
编写parse_detail_page方法,通过循环方法爬取指定的信息
(10)52~56行
运行JDSpider和run方法,最后关闭csv文件


本文章仅供学习讨论交流,请勿做其它用途,侵删,谢谢。
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S1901

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值