BeautifulSoup脚本中的Python索引错误

时间:2017-08-25 01:44:19

标签: python dictionary indexing beautifulsoup urllib3

我正在编写一个小的Python抓取脚本,它使用urllib3库从网站中提取一些价格数据,并在Beautiful Soup Library中解析它,这样我就可以找到合适的类来保存我感兴趣的数据,然后再将其插入到我在以后的应用程序中使用的词典列表。

我在邮政编码列表中迭代了一个项目,然后对于此项目中的每个(Key),我创建了一个字符串来构建我的http.request的URL,该URL存储在变量priceurl中。 然后通过BeautifulSoup解析priceurl并将其存储在汤变量中。

然后我在汤变量中对我感兴趣的html类执行findAll并将结果存储在links变量中。 最后,我尝试将我感兴趣的数据写回邮政编码列表,字典键,字典键。

我在Heroku上运行以下代码时遇到问题,我收到以下错误:

2017-08-25T01:14:34.311553 + 00:00 app [web.1]:邮政编码[0] [每个] ["价格"] =链接[2] 2017-08-25T01:14:34.311553 + 00:00 app [web.1]:IndexError:列表索引超出范围

据我所知,使用交互式解释器并检查列表的长度,它不会超出范围(但显然是!!)。我还在挠头!请帮助!!!

realestateurl = "https://www.realestate.com.au/neighbourhoods/"
postcode = [{3192: {"price": "100", "suburb": "cheltenham"}, 3195: {"price": "200", "suburb": "mentone"},
             3193: {"price": "300","suburb""parkdale"}}]

for item in postcode:
    for each in item:
        priceurl = http.request("GET", realestateurl + item[each]["suburb"] + "-" + (str(each)) + "-vic",preload_content=False)
        soup = BeautifulSoup(priceurl)
        links = soup.findAll("div", {"class": "price strong"})
        postcode[0][each]["price"] = links[2]

1 个答案:

答案 0 :(得分:0)

你的代码工作正常。我在Python3中使用了请求模块和BeautifulSoup,我能够得到输出:

https://www.realestate.com.au/neighbourhoods/cheltenham-3192-vic
[<div class="price strong">$905,000</div>, <div class="price strong">$975,500</div>, <div class="price strong">$1,171,500</div>, <div class="price strong">$400 PW</div>, <div class="price strong">$500 PW</div>, <div class="price strong">$655 PW</div>, <div class="price strong">$382,550</div>, <div class="price strong">$528,000</div>, <div class="price strong">$745,000</div>, <div class="price strong">$330 PW</div>, <div class="price strong">$380 PW</div>, <div class="price strong">$550 PW</div>, <div class="price strong"></div>, <div class="price strong"></div>, <div class="price strong"></div>]
https://www.realestate.com.au/neighbourhoods/parkdale-3193-vic
[]

现在注意到,对于第一个链接,输出几乎可以接受,但是第二个链接它什么都没有显示。可能是因为这样你会收到错误。

如果您将在浏览器中打开该链接,那么您会注意到它会给出404错误。因此,邮政编码中的数据可能是错误的,或者您可能需要进行一些错误处理。

尝试使用try和except,并记下那些无效的链接。例如

https://www.realestate.com.au/neighbourhoods/mentone-3195-vic

此链接也提供404错误。