“chatgpt作为一个编程助手,虽然不能帮我们解决一个复杂的业务需求,但在处理一些具体工具类需求上,能够快速生成我们需要的代码,尤其对一些编程初学者,不仅能借助chatgpt快速完成自己的小工具,还能在与chatgpt的交流中学到编程很多技巧,比如使用它编写Python爬虫代码。 ”
需要注意的是,ChatGPT生成的代码可能不是完美的,仍需自己进行测试、调整和验证。它只是一个辅助工具,而不是替代你自己学习和实践的方式。将ChatGPT作为学习和探索的工具,并与其他资源相结合,可以帮助你提高爬虫水平。
首先我们要分析一下我们要抓取的对象,开京东商城网站,进入一个具体商品的网页,找到商品评论板块,查看网页源代码并不能找到评论信息,说明网页是动态加载设计。所以直接通过页面和接口都没有办法抓取到需要的内容,这个时候可以应该通过模拟浏览器操作来抓取。直接把需求提给chatgpt。
指令:
你是一个Python专家,擅长爬虫代码编写,这个网站的商品评价是动态加载的,请用Python代码爬取这个网站https://item.jd.com/100038004389.html的商品评价
安装好需要的库后,直接复制代码到编辑器运行,修改ChromeDriver路径为本地实际的地址,然后运行代码,可以看到直接获取到了我们需要的内容:
但是这只是抓取了一页的请求,可以继续优化,获取多页的内容,并且保存在本地文件中。
继续在对话中提出需求:
生成代码后,再次复制到编辑器中(注意修改ChromeDriver路径),运行后报错:
直接把报错发送给chatgpt,分析了错误的原因,立马给出了解决方案,重新生成一份代码。
这次给出了最终的代码,复制到编辑器中运行,成功,获取到了5页的商品评论,并且保存到了本地文件product_reviews.csv中。
最终生成的代码如下:
import csv
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
# 设置ChromeDriver的路径
webdriver_service = Service('path/to/chromedriver')
# 创建Chrome浏览器选项
chrome_options = Options()
chrome_options.add_argument('--headless') # 无头模式,可选
chrome_options.add_argument('--no-sandbox')
# 创建Chrome浏览器驱动
driver = webdriver.Chrome(service=webdriver_service, options=chrome_options)
url = 'https://item.jd.com/100038004389.html'
page_count = 5 # 想要获取的评价页数
# 使用Selenium打开页面
driver.get(url)
# 等待页面加载完成
driver.implicitly_wait(10)
# 创建CSV文件
csv_file = open('product_reviews.csv', 'w', newline='', encoding='utf-8')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Content'])
# 获取评价信息
for _ in range(page_count):
# 模拟滚动到底部,以加载更多评价内容
actions = ActionChains(driver)
actions.send_keys(Keys.END)
actions.perform()
# 等待加载更多评价
time.sleep(2)
# 提取评价信息
evaluations = driver.find_elements(By.CSS_SELECTOR, '.comment-item')
for evaluation in evaluations:
# 提取评价内容
content = evaluation.find_element(By.CSS_SELECTOR, '.comment-con').text.strip()
csv_writer.writerow([content])
# 点击下一页按钮
next_button = driver.find_element(By.CSS_SELECTOR, '.ui-pager-next')
driver.execute_script("arguments[0].click();", next_button)
# 等待页面加载完成
driver.implicitly_wait(10)
# 关闭浏览器
driver.quit()
# 关闭CSV文件
csv_file.close()
这段代码,如果初学者自己去写,可能半天一天也不一定能完成,现在只需要20分钟就能搞定。
有时候,生成的代码不一定可用,一方面可以多试几次,把遇到的问题告诉它,问题不仅会得到解决,还能了解产品问题的原因是什么。