Python - Scrapy无法获取数据

时间:2014-05-20 12:04:28

标签: python scrapy scraper

我刚刚开始使用Python / Scrapy。

我写了一个爬行网站并获取信息的蜘蛛。但我被困在两个地方。

  1. 我正在尝试从页面中检索电话号码,它们的编码方式如下

    <span class="mrgn_right5">(+001) 44 42676000,</span>
    <span class="mrgn_right5">(+011) 44 42144100</span>
    
  2. 我的代码是:

    getdata = soup.find(attrs={"class":"mrgn_right5"})
    if getdata:
       aditem['Phone']=getdata.get_text().strip()
       #print phone
    

    但它只取得第一组数字而不是第二组数字。我该如何解决这个问题?

    1. 在同一页面上还有另一组信息
    2. 我正在使用此代码

          getdata = soup.find(attrs={"itemprop":"pricerange"})
          if getdata:
              #print getdata
              aditem['Pricerange']=getdata.get_text().strip()
              #print pricerange
      

      但它没有取得任何东西。

      任何有关修复这两个问题的帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

通过浏览Beautiful Soup documentationfind只返回一个结果。如果预期/需要多个结果,请改用find_all。由于有两个结果,因此会返回一个列表,因此需要将列表的元素连接在一起(例如),以将它们添加到Phone的{​​{1}}字段中。

AdItem

对于第二个问题,您需要访问返回对象的属性。请尝试以下方法:

getdata = soup.find_all(attrs={"class":"mrgn_right5"})
if getdata:
   aditem['Phone'] = ''.join([x.get_text().strip() for x in getdata])

对于地址信息,以下代码有效,但非常黑客,毫无疑问可以通过比我更了解美丽汤的人来改进。

getdata = soup.find(attrs={"itemprop":"pricerange"})
if getdata:
    aditem['Pricerange'] = getdata.attrs['content']