kygschp 发表于 2021-10-30 16:51:24

爬虫

有没有老哥知道下面的代码出了啥问题,返回的是一个空列表

import requests
import bs4

url = 'https://www.ewi-psy.fu-berlin.de/en/mitarbeiterliste/index.html?show=profs'

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'}

response = requests.get(url, headers=headers)

soup = bs4.BeautifulSoup(response.text, 'html.parser')

url_targets = soup.find_all('div', class_=('box-staff-list-table-name', 'col-s-12', 'col-l-4'))

suchocolate 发表于 2021-10-31 23:29:08

真正的数据在ajax response里。
import requests
from bs4 import BeautifulSoup


def main():
    # 基础信息
    basic_url = 'https://www.ewi-psy.fu-berlin.de'
    url = 'https://www.ewi-psy.fu-berlin.de/en/mitarbeiterliste/index.html?show=profs'
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
    ajax_headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
                  'X-Requested-With': 'XMLHttpRequest',
                  'Referer': 'https://www.ewi-psy.fu-berlin.de/en/mitarbeiterliste/index.html?show=profs'}

    # 获取ajax url
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    ajax_url = soup.find_all('div', class_="cms-box-ajax-content")['data-ajax-url']

    # 合成正式 url
    url = f'{basic_url}{ajax_url}'
   
    # 查找div
    r = requests.get(url, headers=ajax_headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    url_targets = soup.find_all('div', class_=('box-staff-list-table-name', 'col-s-12', 'col-l-4'))
    print(url_targets)


if __name__ == "__main__":
    main()

kygschp 发表于 2021-11-1 21:40:05

suchocolate 发表于 2021-10-31 23:29
真正的数据在ajax response里。

竟然还可以这样,但是我想找的内容只有div class="box-staff-list-table-name col-s-12 col-l-4",这里爬出来的内容还包括div class="box-staff-list-table-phone col-s-12 col-l-2"、div class="box-staff-list-table-link col-s-12 col-l-3这些不相关的内容,请问这是怎么回事呢

suchocolate 发表于 2021-11-1 22:06:29

kygschp 发表于 2021-11-1 21:40
竟然还可以这样,但是我想找的内容只有div class="box-staff-list-table-name col-s-12 col-l-4",这里爬 ...

那你改成这个试试url_targets = soup.find_all('div', class_="box-staff-list-table-name")
我只是参考你的语法,并不清楚你想爬的具体内容。

kygschp 发表于 2021-11-2 14:59:17

suchocolate 发表于 2021-11-1 22:06
那你改成这个试试
我只是参考你的语法,并不清楚你想爬的具体内容。

可以了,感谢大佬,太强了
页: [1]
查看完整版本: 爬虫