【问题标题】:Get specific a hrefs with BeautifulSoup使用 BeautifulSoup 获取特定的 href
【发布时间】:2018-11-07 15:11:20
【问题描述】:

我正在尝试抓取包含在 this website 框中的所有链接。但是,我的模式不返回任何内容。我究竟做错了什么?如果我通常寻找带有 href=True 的“a”,我不会得到我正在寻找的链接。

import requests
from bs4 import BeautifulSoup

url = 'https://www.nationalevacaturebank.nl/vacature/zoeken?query=&location=&distance=city&page=1&limit=100&sort=relevance&filters%5BcareerLevel%5D%5B%5D=Starter&filters%5BeducationLevel%5D%5B%5D=MBO'
page = requests.get(url)  
soup = BeautifulSoup(page.content, 'lxml')

ahrefs = soup.find_all('a', {'class': "article-link" , 'href': True})
for a in ahrefs:
    print(a.text)

【问题讨论】:

  • 您到底想选择什么? True 不是超引用属性的有效值。另请注意,href 是链接的强制属性(没有@href 链接只是一个字符串),因此只有当它具有href 属性时才需要选择链接(如果您的意思是那)
  • @Andersson 即使我省略了 href (因为字符串也可以),我什么也得不到。我想要块中的所有网址。 Xpath 是 //*[@id="search-results-container"]/div/div[1]/div[10]/article/job/a 和 CSS 选择器 #search-results-container > div > div.search-items.ng-scope > div:nth-child(2) > article > job > a(不知道这些信息是否有帮助)
  • 你不能在这里使用 BeautifulSoup(动态内容)..但是你可以解析这个 json:nationalevacaturebank.nl/vacature/…
  • @t.m.adam 为什么不呢?我想刮几页,所以我不认为我想一直制作 jsons。
  • 正如我所说的内容是动态的,所以你无法通过请求和 BequtifulSoup 获得它。你可以使用 Selenium,但即使那样你也不必使用 BeautifulSoup,因为 Selenium 有自己的选择器。

标签: python html web-scraping beautifulsoup python-requests


【解决方案1】:

这是一个从外部 Json API 动态加载其内容的 Angular 网站。 api 位于此处:https://www.nationalevacaturebank.nl/vacature/zoeken.json,需要设置 cookie。以下将格式化您要提取的链接:

import requests

r = requests.get(
    'https://www.nationalevacaturebank.nl/vacature/zoeken.json',
    params = {
        'query': '',
        'location': '',
        'distance': 'city',
        'page': '1,110',
        'limit': 100,
        'sort': 'date',
        'filters[careerLevel][]': 'Starter',
        'filters[educationLevel][]': 'MBO'
    },
    headers = {
        'Cookie': 'policy=accepted'
    }
)

links = [
    "/vacature/{}/reisspecialist".format(t["id"])
    for t in r.json()['result']['jobs']
]

print(links)

Json 结果还为您提供了嵌入在此页面中的所有卡片元数据

【讨论】:

  • 您如何使用此解决方案浏览所有页面?这只会返回 100 个结果
  • @Lunalight 尝试使用页面和限制参数,例如 page=1 limit=100 然后 page=2 limit=100
猜你喜欢
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2015-02-02
  • 2015-03-16
相关资源
最近更新 更多