繁体   English   中英

检索ID并获取TypeError:列表索引必须是整数或切片,而不是str

[英]Crawling IDs and getting TypeError: list indices must be integers or slices, not str

我尝试从房地产网站获取ID。 在我的第一次尝试中,我总是获得一个建筑项目中的第一个房地产。 现在,我尝试进一步深入HTML树,以获取其余的建筑项目。 但是我得到这个错误:

“ TypeError:列表索引必须是整数或切片,而不是str”

HTML看起来像这样:

  "resultlist.resultlist": { "paging": { "next": { "@xlink.href": "\\/Suche\\/ST\\/P-2\\/Wohnung-Kauf\\/Nordrhein-Westfalen\\/Duesseldorf\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/true" }, "current": { "@xlink.href": "\\/Suche\\/ST\\/Wohnung-Kauf\\/Nordrhein-Westfalen\\/Duesseldorf\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/-\\/true" }, "pageNumber": 1, "pageSize": 20, "numberOfPages": 3, "numberOfHits": 140, "numberOfListings": 50 }, "matchCountList": "", "resultlistEntries": [{ "@numberOfHits": "140", "@realEstateType": "2", "resultlistEntry": [{ "@id": "111337199", "@modification": "2019-06-09T13:36:23.513+02:00", "@creation": "2019-05-05T14:10:47.000+02:00", "@publishDate": "2019-05-05T14:10:47.000+02:00", "similarObjects": [{ "similarObject": [{ "@id": "105147583", "@modification": "2019-05-05T10:37:59.830+02:00", "@creation": "2018-05-30T11:44:29.000+02:00", "@publishDate": "2018-05-30T11:44:29.000+02:00", "realEstateId": 105147583, 

我的第一次尝试是这样的:

page1 = ('https://www.immobilienscout24.de/Suche/S-1/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true')
res_page1 = requests.get(page1)
soup_page1 = bs(res_page1.content, 'lxml')
r_page1 = re.compile(r'resultListModel:(.*)')
data_page1 = soup_page1.find('script', text=r_page1).text
script_page1 = r_page1.findall(data_page1)[0].rstrip(',')
results_page1 = json.loads(script_page1)
ids_page1 = [item["@id"] for item in results_page1['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']]

并得到以下输出:

['111353960', '110253440', '111994208', '110517626', '109984070', '109855231', '108761945', '108639776', '106997219', '106492496', '111604737', '111357085', '92741038', '112031279', '111988597', '111876292', '111870285', '111798416', '110742328', '110742299']

现在我去得到其余的像这样:

ids_page1 = [item["@id"] for item in results_page1['searchResponseModel']['resultlist.resultlist']['resultlistEntries']['resultlistEntry']['similarObjects'][0]['similarObject']]

现在,我收到类型错误。

有人可以解释一下我在做什么错。

尝试以下通过级别的内容

from bs4 import BeautifulSoup as bs #4.7.1
import requests

page1 = 'https://www.immobilienscout24.de/Suche/S-1/Wohnung-Kauf/Nordrhein-Westfalen/Duesseldorf/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/true'
res_page1 = requests.get(page1)
soup_page1 = bs(res_page1.content, 'lxml')
r_page1 = re.compile(r'resultListModel:(.*)')
data_page1 = soup_page1.find('script', text=r_page1).text
script_page1 = r_page1.findall(data_page1)[0].rstrip(',')
results_page1 = json.loads(script_page1)
ids = []

for item in results_page1['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']:
    ids.append(item['@id'])
    if 'similarObjects' in item:
        for i in item['similarObjects'][0]['similarObject']:
            if isinstance(i,dict):
                ids.append(i['@id'])
            elif i == '@id':
                ids.append(item['similarObjects'][0]['similarObject'][i])

在输出中,您将看到一个字符串列表。 注意值周围的' 在数字串上调用int(s)将其转换为数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM