鱼C论坛

 找回密码
 立即注册
查看: 1853|回复: 4

[已解决]爬虫

[复制链接]
发表于 2021-10-30 16:51:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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'))
最佳答案
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")[1]['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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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")[1]['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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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这些不相关的内容,请问这是怎么回事呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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")
我只是参考你的语法,并不清楚你想爬的具体内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-2 14:59:17 | 显示全部楼层
suchocolate 发表于 2021-11-1 22:06
那你改成这个试试
我只是参考你的语法,并不清楚你想爬的具体内容。

可以了,感谢大佬,太强了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表