我的代码在我的机器上可靠地擦除数据,而不是其他人

时间:2016-09-21 15:12:08

标签: python web-scraping ebay

我使用Ubuntu 16.04,并且我创建了一个代码,该代码接收eBay链接并清除所售产品的单位数量(如果信息可用)。我的版本看起来像这样:

import requests
from bs4 import BeautifulSoup

def sold(url):
  soup = BeautifulSoup(requests.get(url).text, 'html.parser')
  amount_sold = soup.find('span', attrs={'class':"qtyTxt vi-bboxrev-dsplblk  vi-qty-fixAlignment"})
  if amount_sold:
    amount_sold = amount_sold.find('a')
    amount_sold = amount_sold.get_text().replace(u',', u'')[:-5]
  else:
    amount_sold = "N/A"

当我在我的机器上使用此功能时,它可以在每次可用时可靠地擦除数据。例如,对于此页面:http://www.ebay.com/itm/13-lighted-led-bat-halloween-window-silhouette-decoration/311651989599?hash=item488fe7f85f,它将可靠地返回53(在撰写本文时)。但是,当我在另一台机器上尝试此代码时(在另一台机器上我尝试过Windows,Cygwin,甚至是外部Ubuntu服务器),我的函数返回" N / A",因为我的amount_sold变量根本找不到任何东西。我进入页面以确保html代码是相同的,当我通过在另一台机器上手动写出每一行来测试我的代码时,它完美地工作。只有当它在一个函数中运行时它才能工作。

有没有办法确保我的代码可以在任何机器上运行?代码可能在我自己的工作上有什么原因,但不能在不同的机器上工作?为什么代码在我逐行测试时会起作用,而不是在函数内部进行测试时呢?

1 个答案:

答案 0 :(得分:0)

我不知道你是如何让它在你的机器上工作但是要搜索一个包含多个类的标签,你应该作为一个列表传入,其元素是你的类的名称#39;对此很感兴趣:

soup.find('span', attrs={'class':["qtyTxt", "vi-bboxrev-dsplblk", "vi-qty-fixAlignment"]})

我怀疑您正在使用不同版本的beautifulsoup,允许您将这些类作为单个字符串传递(我不知道任何版本的字符串)。

此答案已在beautifulsoup4版本4.5

上进行了测试

这是我机器上pip freeze的输出。

beautifulsoup4==4.5.0