【问题标题】:Python BeautifulSoup parsing / crawl tablePython BeautifulSoup 解析/爬表
【发布时间】:2022-01-23 22:37:22
【问题描述】:

为了我自己的利益,我想从"https://thinkimmo.com/search?noReset=true" 爬取属性表。点击“TABELLE”(TABLE)后,您可以在一个表格中看到所有属性。

使用以下代码,我可以看到表格:

driver.get("https://thinkimmo.com/search?noReset=true")
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[2]/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/button[2]/span[1]').click()

现在我可以使用以下代码抓取表格的某些部分:

soup = BeautifulSoup(driver.page_source, 'html.parser')
htmltable = soup.find('table', { 'class' : 'MuiTable-root' })
def tableDataText(table):       
    rows = []
    trs = table.find_all('tr')
    headerow = [td.get_text(strip=True) for td in trs[0].find_all('th')] # header row
    if headerow: # if there is a header row include first
        rows.append(headerow)
        trs = trs[1:]
    for tr in trs: # for every table row
        rows.append([td.get_text(strip=True) for td in tr.find_all('td')]) # data row
    return rows
list_table = tableDataText(htmltable)
list_table

然而结果不是我所期望的。我只得到前 7 个标题,但没有返回所有其他标题。

仔细查看网页的 HTML 后,我不确定如何获取表格的所有标题和结果。

我期待解决仅获取部分标题的问题。而且我更感兴趣的是我失败的原因。

我在table = soup.find("table") 的结果中看到的是,在第 7 个标题标题之后,表格关闭了。

提前致谢。

史蒂芬

【问题讨论】:

    标签: python html web-scraping beautifulsoup


    【解决方案1】:

    该网站使用您可以编辑的后端 api 来批量下载数据:

    import requests
    import pandas as pd
    
    results = 1000
    
    url = f'https://api.thinkimmo.com/immo?active=true&type=APARTMENTBUY&sortBy=publishDate,desc&from=0&size={str(results)}&grossReturnAnd=false&allowUnknown=false&excludePlatforms=ebk,immowelt&favorite=false&noReset=true&excludedFields=true&geoSearches=[]&averageAggregation=buyingPrice%3BpricePerSqm%3BsquareMeter%3BconstructionYear%3BrentPrice%3BrentPricePerSqm%3BrentPricePerSqm%3BrunningTime&termsAggregation=platforms.name.keyword,60'
    
    resp = requests.get(url).json()
    df = pd.DataFrame(resp['results'])
    df.to_csv('thinkimmo.csv',index=False)
    print('Saved to thinkimmo.csv')
    

    这是很多非结构化数据,但应该会有所帮助。如果您想检查此 api 调用中的内容并且只获取返回的 JSON 的某些部分,那么您可以打开浏览器的开发人员工具 - 网络 - 获取/XHR 并重新加载页面以查看所有后端请求是否触发。您正在寻找一个以“immo”开头的产品?查看有效负载和预览以查看所有数据。这就是我们在上面抓取的内容。

    【讨论】:

    • 请注意我是如何编辑 API 的 url 的,强制它给出前 1000 个结果,通常 api 会受到这种类型的保护,你必须遍历页面一次只能得到 20 个结果。很少有人可以像这样批量执行此操作并下载他们的整个库存
    猜你喜欢
    • 2014-06-16
    • 2017-09-12
    • 2020-04-03
    • 1970-01-01
    • 2015-03-08
    • 2011-06-15
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多