匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

【实战】Python如何爬取天猫商品信息?

【实战】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和其他语言来实现,让我们能够更好地分析和利用网站数据。