你注意到亚马逊上 iPhone 13 的折扣了吗? 好吧,Apple 没有提供很多折扣,我想在几天内跟踪他们的定价变化。 手动操作是不可能的,所以我想写一个网络抓取程序,然后在我的 Linux 机器上运行它作为一个 cronjob 来跟踪定价变化。
目录
Amazon Scraper Python 程序
谢天谢地,我得到了 Python 程序来从这里抓取亚马逊产品页面 CodeForGeek 教程. 但是,我的要求有点多。 因此,我通过添加将数据保存到 CSV 文件的功能来扩展代码。
这是我完整的 Python 代码,用于抓取亚马逊产品页面,然后将其保存到 CSV 文件中。
from bs4 import BeautifulSoup import requests URL = 'https://www.amazon.com/dp/B09LNT1F3H/' HEADERS = ({ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 44.0.2403.157 Safari / 537.36', 'Accept-Language': 'zh, en;q=0.5'}) webpage = requests.get(URL, headers=HEADERS) soup = BeautifulSoup(webpage.content, "lxml") product_name="" product_price="" try: product_title = soup.find("span", attrs={"id": 'productTitle'}) product_name = product_title.string.strip().replace(',', '') except AttributeError: product_name = "NA" try: product_price = soup.find("span", attrs={'class': 'a-offscreen'}).string.strip().replace(',', '') except AttributeError: product_price = "NA" print("product Title = ", product_name) print("product Price = ", product_price) # writing data to a CSV file import datetime import csv time_now = datetime.datetime.now().strftime('%d %b, %Y %H:%M:%S') with open("data.csv", mode="a") as csv_file: csv_writer = csv.writer(csv_file) csv_writer.writerow([time_now, product_name, product_price])
设置 Cronjob
我将代码保存到 amazon_scraper.py 文件中。 为了测试,我使用以下配置将 crontab 设置为每 5 分钟运行一次。
*/5 * * * * cd /root/amazon_scraper && /usr/bin/python3.8 /root/amazon_scraper/amazon_scraper.py >> /root/amazon_scraper/scraper.log 2>&1
过了一段时间,我检查了 data.csv 文件,它有以下条目。
"10 Sep, 2022 19:50:43",Apple iPhone 13 128GB Red - Unlocked (Renewed),$759.00 "10 Sep, 2022 20:00:04",Apple iPhone 13 128GB Red - Unlocked (Renewed),$759.00 "10 Sep, 2022 20:05:03",Apple iPhone 13 128GB Red - Unlocked (Renewed),$759.00 "10 Sep, 2022 20:10:05",Apple iPhone 13 128GB Red - Unlocked (Renewed),$759.00 "10 Sep, 2022 20:15:04",Apple iPhone 13 128GB Red - Unlocked (Renewed),$759.00
您可以看到有一些 print() 语句。 此控制台输出被定向到 scraper.log 文件。
root@localhost:~/amazon_scraper# cat scraper.log product Title = Apple iPhone 13 128GB Red - Unlocked (Renewed) product Price = $759.00 product Title = Apple iPhone 13 128GB Red - Unlocked (Renewed) product Price = $759.00 product Title = Apple iPhone 13 128GB Red - Unlocked (Renewed) product Price = $759.00 product Title = Apple iPhone 13 128GB Red - Unlocked (Renewed) product Price = $759.00
如果有任何错误,它们也会进入此日志文件。 因此,您可以检查此文件以调试任何问题。
批量抓取和请求阻止
我的程序仅用于学习目的。 如果您尝试为很多产品运行它,亚马逊很有可能会阻止您的 IP。 如果您有一些类似企业的需求,最好使用第三方工具,例如这个 BrightData 亚马逊刮板.
结论
使用 Python 进行 Web 抓取非常简单,当它设置为作为 cronjob 运行时,您可以跟踪任何产品的定价变化。 这在个人层面很有趣,但如果您需要处理大量数据,最好的选择是使用一些企业工具。