亚马逊榜单爬取 IP防爬
随着互联网的发展,越来越多的人开始关注亚马逊这个全球最大的电商平台,亚马逊上的商品种类繁多,价格也相对较低,因此吸引了大量的消费者,由于亚马逊的限制,普通用户无法直接访问其商品列表页面,只能通过爬虫技术来获取相关信息,本文将介绍如何使用Python爬取亚马逊商品榜单,并提供一些防止IP被封的技巧。
准备工作
1、安装所需库
在开始爬取亚马逊商品榜单之前,我们需要先安装一些Python库,这里推荐使用requests
、BeautifulSoup
和pandas
这几个库,可以使用以下命令进行安装:
pip install requests beautifulsoup4 pandas
2、安装代理IP池
为了避免因为频繁访问而被封IP,我们需要使用代理IP池,这里推荐使用requests-proxy
库,可以使用以下命令进行安装:
pip install requests-proxy
接下来,我们需要从网上收集一些免费的代理IP,并将它们保存到一个文件中,代理IP的质量越高,越不容易被封,我们可以从以下网站获取免费代理IP:
https://www.xicidaili.com/nn/
https://www.ip3366.net/
http://www.ip138.com/
爬取亚马逊商品榜单
1、导入所需库
import requests from bs4 import BeautifulSoup import pandas as pd import random
2、获取代理IP列表
def get_proxy_list(): 从文件中读取代理IP列表 with open('proxy_list.txt', 'r') as f: proxy_list = f.readlines() return [proxy.strip() for proxy in proxy_list]
3、发送请求并获取网页内容
def get_html(url): 从代理IP列表中随机选择一个代理IP proxy = random.choice(get_proxy_list()) proxies = { 'http': 'http://' + proxy, 'https': 'https://' + proxy, } try: response = requests.get(url, proxies=proxies) if response.status_code == 200: return response.text else: return None except Exception as e: print(e) return None
4、解析网页内容并提取商品信息
def parse_html(html): soup = BeautifulSoup(html, 'lxml') items = soup.find_all('div', class_='sg-col-inner') products = [] for item in items: product = {} product['title'] = item.find('span', class_='a-size-medium a-color-base a-text-normal').text.strip() product['price'] = item.find('span', class_='a-offscreen').text.strip() if item.find('span', class_='a-offscreen') else '' product['link'] = item.find('a')['href'] if item.find('a') else '' products.append(product) return products
5、将提取的商品信息保存到CSV文件中
def save_to_csv(products): df = pd.DataFrame(products) df.to_csv('amazon_products.csv', index=False, encoding='utf-8')
6、主函数调用以上函数进行爬取和保存数据
def main():
url = 'https://www.amazon.cn/s?k=%E7%B1%BB&rh=n%3A1000020511&ref=nb_sb_noss' % '电子书' 以“电子书”为例的亚马逊搜索结果页面URL,可以根据需要修改关键词和国家代码等参数,如果要爬取其他类别的商品,请参考亚马逊商品页面的结构进行相应的修改,这里使用了中文字符编码,如果要爬取英文的商品,请将URL中的“%E7%B1%BB”改为相应的英文字符编码,对于“Kindle”,应将其改为“kindle”,对于“Book”,应将其改为“book”,对于“Electronics”,应将其改为“electronics”,对于“Mobile Phones”,应将其改为“mobilephones”,对于“Clothing”,应将其改为“clothing”,对于“Home & Kitchen”,应将其改为“homeandkitchen”,对于“Sports & Outdoors”,应将其改为“sportsandoutdoors”,对于“Beauty & Health”,应将其改为“beautyandhealth”,对于“Pet Supplies & Food”,应将其改为“petsuppliesandfood”,对于“Toys & Games”,应将其改为“toysatgames”,对于“Office Products”,应将其改为“officeproducts”,对于“Automotive”,应将其改为“automotive”,对于“Baby & Kids”,应将其改为“babyandkids”,对于“Movies & TV Shows”,应将其改为“moviestashows”,对于“Musical Instruments”,应将其改为“musicalinstruments”,对于“Computers & Accessories”,应将其改为“computersacessories”,对于“Video Games & Consoles”,应将其改为“videogamesandconsoles”,对于“Kindle Store",应将其改为"kindlestore",对于"Kitchen Appliances",应将其改为"kitchenappliances",对于"Personal Care",应将其改为"personalcare",对于"Furniture",应将其改为"furniture",对于"Grocery & Gourmet Food",应将其改为"groceryandgourmetfood",对于"Party Supplies & Decorations",应将其改为"partysuppliesanddecorations",对于"Books",应将其改为"books",对于"Home Improvement & Contractors",应将其改为"homeimprovementandcontractors",对于"Industrial & Scientific",应将其改为"industrialandscientific",对于"Baby & Toddler",应将其改为"babyandtoddler",对于"Pet Training & Care",应将其改为"pettrainingandcare"......以此类推,请注意,这里只是列举了部分常用的分类名称和对应的英文字符编码,实际上,亚马逊的商品分类非常丰富,你可以根据需要添加更多的分类名称和对应的英文字符编码,你还可以根据需要调整URL中的参数,以便爬取不同国家或地区的商品数据,如果你想爬取特定品牌的商品数据,可以在URL中添加相应的参数,例如&q=%E5%93%81%E7%89%8C
,表示搜索小米手机的商品数据,调用以上函数进行爬取和保存数据即可。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/274897.html