在没有 [href] 的多层网站上进行 Python 网页抓取

Posted

技术标签:

【中文标题】在没有 [href] 的多层网站上进行 Python 网页抓取【英文标题】:Python web-scraping on a multi-layered website without [href] 【发布时间】:2019-04-03 22:06:00 【问题描述】:

我正在寻找一种从学生住宿网站 uniplaces 中抓取数据的方法:https://www.uniplaces.com/en/accommodation/berlin。

最后,我想为每个属性抓取特定信息,例如卧室大小、室友数量、位置。为了做到这一点,我首先必须抓取所有属性链接,然后再抓取各个链接。

但是,即使在通过控制台并使用 BeautifulSoup 提取 url 之后,我也无法提取指向单独列表的 url。它们似乎没有作为 [href] 包含在内,而且我无法在 html 代码中识别任何其他格式的链接。

这是我使用的 python 代码,但它也没有返回任何内容: 从 bs4 导入 BeautifulSoup 导入 urllib.request

resp = urllib.request.urlopen("https://www.uniplaces.com/accommodation/lisbon")
soup = BeautifulSoup(resp, from_encoding=resp.info().get_param('charset'))

for link in soup.find_all('a', href=True):
    print(link['href'])

所以我的问题是:如果链接不包含在 http:// 格式或引用为 [href]:有没有办法提取列表 url?

我非常感谢任何对此的支持!

一切顺利, 汉娜

【问题讨论】:

【参考方案1】:

如果您查看网络选项卡,您会发现一些专门针对此 url 的 API 调用:https://www.uniplaces.com/api/search/offers?city=PT-lisbon&limit=24&locale=en_GB&ne=38.79507211908374%2C-9.046124472314432&page=1&sw=38.68769060641113%2C-9.327992453271463

指定位置 PT-lisbon 和北(ne)和西南(sw)方向。从此文件中,您可以获取每个优惠的 id 并将其附加到当前 url,您还可以获取从网页获得的所有信息(价格、描述等...)

例如:

import requests

resp = requests.get(
    url = 'https://www.uniplaces.com/api/search/offers', 
    params = 
        "city":'PT-lisbon',
        "limit":'24',
        "locale":'en_GB',
        "ne":'38.79507211908374%2C-9.046124472314432',
        "page":'1',
        "sw":'38.68769060641113%2C-9.327992453271463'
    )
body = resp.json()

base_url = 'https://www.uniplaces.com/accommodation/lisbon'

data = [
    (
        t['id'],                  #offer id
        base_url + '/' + t['id'], #this is the offer page
        t['attributes']['accommodation_offer']['title'], 
        t['attributes']['accommodation_offer']['price']['amount'],
        t['attributes']['accommodation_offer']['available_from']
    )
    for t in body['data']
]

print(data)

【讨论】:

以上是关于在没有 [href] 的多层网站上进行 Python 网页抓取的主要内容,如果未能解决你的问题,请参考以下文章

Python如何将RGB图像转换为Pytho灰度图像?

python+selenium如何定位多层iframe中元素

NextJs中如何通过多层组件传递href值?

多层自编码器的微调

国内网站备案。备案的是域名?还是服务器?

对苹果maccms网站漏洞进行修复解决过程