【实战】Python如何爬取天猫商品信息?
爬虫是一种常用的网络技术,使用爬虫可以获取网站信息,进行数据分析和应用开发。在本篇文章中,我们将使用Python的爬虫技术来获取天猫商品信息。
一、安装必要的Python库
在开始爬虫之前,我们需要安装一些Python库,这些库将用于数据分析,数据处理和爬虫。这些库包括:
1. requests: 用于获取网页数据。
2. BeautifulSoup: 用于解析网页数据。
3. pandas: 用于数据处理。
4. time:用于进行延时处理。
你可以使用pip来安装这些库,命令如下:
```
pip install requests
pip install beautifulsoup4
pip install pandas
```
二、获取网页数据
在这一步中,我们将使用requests库来获取天猫搜索页面的HTML数据。天猫搜索页面的URL为https://list.tmall.com/search_product.htm。下面是获取HTML数据的Python代码:
``` python
import requests
def get_html(url):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
```
以上代码通过requests库发送一个GET请求,获取url对应的HTML页面数据。如果请求成功,则返回HTML文本数据;否则返回空字符串。
三、解析网页数据
在这一步中,我们将使用BeautifulSoup库来解析HTML数据,获取商品的名称、价格和销售量。下面是使用BeautifulSoup来解析HTML数据的Python代码:
``` python
from bs4 import BeautifulSoup
import re
import pandas as pd
def parse_html(html):
soup = BeautifulSoup(html, "html.parser")
goods_list = []
for li_tag in soup.find_all("div", {"class": "product-iWrap"}):
goods = {}
goods_name = li_tag.find("p", {"class": "productTitle"}).text.strip()
goods_price = li_tag.find("p", {"class": "productPrice"}).find("em").text.strip()
goods_sales = li_tag.find("p", {"class": "productStatus"}).find("span").text.strip()
goods["name"] = goods_name
goods["price"] = goods_price
goods["sales"] = goods_sales
goods_list.append(goods)
return goods_list
```
以上代码通过BeautifulSoup库解析HTML文本数据。我们使用find_all方法获取每个商品的HTML标签,并使用正则表达式或者直接使用标签名获取商品名称、价格和销量信息。
四、输出数据
在这一步中,我们将使用pandas库将解析到的商品数据保存到一个CSV文件中。下面是输出数据的Python代码:
``` python
def save_to_csv(goods_list):
df = pd.DataFrame(goods_list)
df.to_csv("goods.csv", index=False, encoding="utf-8-sig")
```
以上代码将解析到的商品列表转化为一个DataFrame,并使用to_csv方法将数据保存到CSV文件中。
五、完整代码
下面是完整的Python代码。你可以将以下代码保存为一个Python文件并执行,然后在当前目录下生成一个名为“goods.csv”的文件,该文件包含了按销量排名的60个天猫商品的名称、价格和销售量信息。
``` python
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
import time
def get_html(url):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def parse_html(html):
soup = BeautifulSoup(html, "html.parser")
goods_list = []
for li_tag in soup.find_all("div", {"class": "product-iWrap"}):
goods = {}
goods_name = li_tag.find("p", {"class": "productTitle"}).text.strip()
goods_price = li_tag.find("p", {"class": "productPrice"}).find("em").text.strip()
goods_sales = li_tag.find("p", {"class": "productStatus"}).find("span").text.strip()
goods["name"] = goods_name
goods["price"] = goods_price
goods["sales"] = goods_sales
goods_list.append(goods)
return goods_list
def save_to_csv(goods_list):
df = pd.DataFrame(goods_list)
df.to_csv("goods.csv", index=False, encoding="utf-8-sig")
if __name__ == '__main__':
goods_list = []
for i in range(1, 4):
url = f"https://list.tmall.com/search_product.htm?q=python&s={i*60}"
html = get_html(url)
goods_list += parse_html(html)
time.sleep(1)
goods_list = sorted(goods_list, key=lambda k: int(k["sales"].replace("人付款", "")), reverse=True)
save_to_csv(goods_list[:60])
```
六、总结
上面的Python代码演示了如何使用requests库,BeautifulSoup库和pandas库来爬取天猫搜索页面的商品信息。这个简单的爬虫可以在很大程度上帮助我们了解HTML解析和数据处理的技术。当然,更加丰富和复杂的爬虫也可以使用Python和其他语言来实现,让我们能够更好地分析和利用网站数据。