Python基于BeautifulSoup爬取京东商品信息
在本文中,我们将介绍如何使用Python和BeautifulSoup库爬取京东商品信息。我们将使用Python的requests库发送HTTP请求,然后使用BeautifulSoup库解析HTML响应。最后,我们将提取商品信息并将其保存到CSV文件中。
安装依赖库
在使用Python工具之前,我们需要先安装依赖库。可以使用pip命令在命令行安装以下两个库:
pip install requests
pip install beautifulsoup4
爬取京东商品信息
我们可以使用Python和BeautifulSoup库爬取京东商品信息。以下是示例代码:
import requests
from bs4 import BeautifulSoup
import csv
def get_jd_products(keyword):
url = f"https://search.jd.com/Search?keyword={keyword}&enc=utf-8"
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.36 Edge/16.16299"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("li", class_="gl-item"):
product = {}
try:
product["name"] = item.find("div", class_="p-name").find("em").text.strip()
product["price"] = item.find("div", class_="p-price").find("i").text.strip()
product["shop"] = item.find("div", class_="p-shop").find("a").text.strip()
product["link"] = "https:" + item.find("div", class_="p-name").find("a")["href"]
except:
continue
products.append(product)
return products
def save_to_csv(products, filename):
with open(filename, "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["name", "price", "shop", "link"])
writer.writeheader()
writer.writerows(products)
if __name__ == "__main__":
products = get_jd_products("手机")
save_to_csv(products, "jd_products.csv")
在这个示例中,我们首先导入了requests、BeautifulSoup和csv库。然后,我们定义了一个名为get_jd_products的函数,该函数接受一个关键字作为参数,并返回一个包含商品信息的列表。在函数中,我们首先构造了一个URL,该URL包含了我们要搜索的关键字。然后,我们定义了一个headers字典,该字典包含了我们的User-Agent信息。接着,我们使用requests库发送HTTP请求,并使用BeautifulSoup库解析HTML响应。然后,我们使用find_all方法查找所有class为“gl-item”的li标签,并使用try-except语句提取商品信息。最后,我们将商品信息添加到products列表中,并返回该列表。
接下来,我们定义了一个名为save_to_csv的函数,该函数接受一个包含商品信息的列表和一个文件名作为参数,并将商品信息保存到CSV文件中。在函数中,我们首先使用open函数创建一个CSV文件,并使用csv.DictWriter类创建一个写入器。然后,我们使用writeheader方法写入CSV文件的标题行,并使用writerows方法写入商品信息。
最后,在主程序中,我们调用get_jd_products函数获取商品信息,并将其保存到名为“jd_products.csv”的CSV文件中。
示例说明
以下是两个示例说明,用于演示“Python基于BeautifulSoup爬取京东商品信息”的完整攻略:
示例1:爬取单个关键字的商品信息
假设我们需要爬取关键字为“手机”的商品信息。以下是示例代码:
import requests
from bs4 import BeautifulSoup
import csv
def get_jd_products(keyword):
url = f"https://search.jd.com/Search?keyword={keyword}&enc=utf-8"
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.36 Edge/16.16299"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("li", class_="gl-item"):
product = {}
try:
product["name"] = item.find("div", class_="p-name").find("em").text.strip()
product["price"] = item.find("div", class_="p-price").find("i").text.strip()
product["shop"] = item.find("div", class_="p-shop").find("a").text.strip()
product["link"] = "https:" + item.find("div", class_="p-name").find("a")["href"]
except:
continue
products.append(product)
return products
def save_to_csv(products, filename):
with open(filename, "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["name", "price", "shop", "link"])
writer.writeheader()
writer.writerows(products)
if __name__ == "__main__":
products = get_jd_products("手机")
save_to_csv(products, "jd_products.csv")
在这个示例中,我们调用了get_jd_products函数,并将关键字“手机”作为参数传递给该函数。然后,我们将获取到的商品信息保存到名为“jd_products.csv”的CSV文件中。
示例2:爬取多个关键字的商品信息
假设我们需要爬取关键字为“手机”和“电脑”的商品信息。以下是示例代码:
import requests
from bs4 import BeautifulSoup
import csv
def get_jd_products(keyword):
url = f"https://search.jd.com/Search?keyword={keyword}&enc=utf-8"
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.36 Edge/16.16299"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("li", class_="gl-item"):
product = {}
try:
product["name"] = item.find("div", class_="p-name").find("em").text.strip()
product["price"] = item.find("div", class_="p-price").find("i").text.strip()
product["shop"] = item.find("div", class_="p-shop").find("a").text.strip()
product["link"] = "https:" + item.find("div", class_="p-name").find("a")["href"]
except:
continue
products.append(product)
return products
def save_to_csv(products, filename):
with open(filename, "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["name", "price", "shop", "link"])
writer.writeheader()
writer.writerows(products)
if __name__ == "__main__":
products = []
products += get_jd_products("手机")
products += get_jd_products("电脑")
save_to_csv(products, "jd_products.csv")
在这个示例中,我们首先定义了一个空列表products。然后,我们调用了两次get_jd_products函数,分别传递关键字“手机”和“电脑”作为参数。接着,我们将获取到的商品信息添加到products列表中,并将其保存到名为“jd_products.csv”的CSV文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于BeautifulSoup爬取京东商品信息 - Python技术站