爬取京东搜索手机型号、店铺名称、价格和评论条数以CSV存储爬取

[复制链接]
作者: acoputojos | 时间: 2023-6-6 03:06:53 | 其他|
0 12

5074

主题

5074

帖子

1万

积分

博士后

Rank: 11Rank: 11Rank: 11Rank: 11

积分
15224
发表于 2023-6-6 03:06:53| 显示全部楼层 |阅读模式
要求:
在京东商城搜索结果中,爬取某个品牌的手机型号、店铺名称、价格和评论条数,存储在CSV文件中。
型号 店铺名称 价格 评论
荣耀50闪充5G手机 荣耀京东旗舰店 3000 5万+
荣耀50se闪充5G手机 荣耀京东旗舰店 2400 2万+
荣耀V30pro手机 拍拍严选官方旗舰店 2400 5000+
荣耀V30 拍拍严选官方旗舰店 2000 100万+
……
问题如下:
1、按照店铺名称计算该品牌手机的均价,利用饼状图呈现店铺名称和手机均价的关系。例如:
店铺名称 平均价格
荣耀京东旗舰店 2700
拍拍严选官方旗舰店 2200
……
2、将该品牌手机,评论前10的手机型号和评论数量用柱状图展示出来。
型号 评论
荣耀V30 100万+
荣耀50闪充5G手机 5万+
荣耀50se闪充5G手机 2万+
荣耀V30pro手机 5000+
……
# 用Python和Selenium抓取京东手机数据
在这篇文章中,我们将介绍如何使用Python和Selenium库抓取京东网站上的手机数据。我们将抓取手机型号、店铺名称、价格和评论数量等信息。首先,我们将介绍所需的库和设置,然后编写实际的爬虫脚本。
## 准备工作
在开始之前,我们需要确保已经安装了必要的库:
1. BeautifulSoup:用于解析HTML内容。
2. Requests:用于发送HTTP请求。
3. Selenium:用于处理动态加载的网页内容。
安装这些库的命令如下:
```bash
pip install beautifulsoup4 requests selenium
```
接下来,我们需要下载一个WebDriver,例如[ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads)。请根据您的浏览器版本下载适当的驱动程序,然后将其解压缩到一个适当的文件夹中。接下来,请确保将该文件夹添加到系统的环境变量`PATH`中。
## 编写爬虫脚本
我们的爬虫脚本主要分为以下几个部分:
1. 使用Selenium获取动态加载的页面内容。
2. 使用BeautifulSoup解析HTML内容并提取所需数据。
3. 将抓取到的数据保存到CSV文件中。
以下是完整的爬虫脚本:
```python
import requests
from bs4 import BeautifulSoup
import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# xpanx.com 网站反爬机制可能随时更新,有问题可以联系微信: LiteMango headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
def get_jd_page(keyword, page):
url = f"https://search.jd.com/Search?keyword={keyword}&enc=utf-8&page={page}"
driver = webdriver.Chrome()
driver.get(url)
try:
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.gl-item"))
)
html = driver.page_source
finally:
driver.quit()
return html
def parse_page(html):
soup = BeautifulSoup(html, "html.parser")
products = soup.find_all("li", class_="gl-item")
product_list = []
for product in products:
try:
title = product.find("div", class_="p-name").find("em").get_text()
price = product.find("div", class_="p-price").find("i").get_text()
shop = product.find("div", class_="p-shop").find("a").get_text().strip()
total_comments = product.find("div", class_="p-commit").find("strong").find("a").get_text()
product_list.append([title, shop, price, total_comments])
except AttributeError:
continue
return product_list
def save_to_csv(product_data, file_name):
with open(file_name, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["型号", "店铺名称", "价格", "评论"])
writer.writerows(product_data)
def main():
keyword = "手机"
page = 1
html = get_jd_page(keyword, page)
product_data = parse_page(html)
save_to_csv(product_data, "jd_mobiles.csv")
if __name__ == "__main__":
main()
```
## 运行爬虫
效果


来源:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部