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