【问题标题】:Can't grab certain a tags from a lazyloading site无法从延迟加载站点获取某些标签
【发布时间】:2017-09-30 08:22:16
【问题描述】:

运行我的刮板,我可以看到它会刮掉不必要的链接,而不是我需要的每所学校的链接。不过,我已经创建了正确的 xpath。该站点包含延迟加载方法。也许需要获取 json 响应。我试过了:

import requests
from lxml import html

url = "http://www.boarding.org.au/find-a-school"
def LazyLoadWeb(address):
    try : 
        page = requests.get(address, timeout=30)
    except Exception: 
        print('timed out')
    else:
        tree = html.fromstring(page.text)
        titles = tree.xpath('//div[contains(@class,"clearfix")]')
        for title in titles:
            links=title.xpath('.//a/@href')
            for link in links:
                print(link)

LazyLoadWeb(url)

【问题讨论】:

  • 您是否正在尝试获取底部带有“clearfix”类的链接?
  • 是的,先生。或者,如果明确说明,可以选择不同的学校名称。

标签: python json web-scraping


【解决方案1】:

您对 json 响应是正确的。该站点使用 Ajax 来填充内容。您需要发出一个 post 请求并简单地从响应中解析 json。

import requests

url = 'http://www.boarding.org.au/ajax-calls/GetSchoolsJson'
payload = {"state": 'null', "schoolType": 2, "orderMode": "ASC", "enableSchoolType": 'false', "loadAll": 'true'}
req = requests.post(url, json=payload)
data = req.json()
for i, item in enumerate(data, start=1):
    print(i, item['URL'])
# 1 /schools/details/4/Abbotsleigh
# ...
# 189 /schools/details/83/Yirara-College

【讨论】:

  • 没问题。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2014-07-24
  • 2015-08-27
  • 2019-08-22
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多