鱼C论坛

 找回密码
 立即注册
查看: 1094|回复: 11

beautifulsoup的使用

[复制链接]
发表于 2019-5-24 15:36:28 | 显示全部楼层 |阅读模式

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

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

x
我想要爬取http://qz.jessiepowell.top/fquiz/push/2655022/ni-de-yin-yang-bi-li-shi-duo-shao?rd=1#里面的关于你的阴阳比例是多少这套测试题,其中包含问题、选项和对应的测试结果。
我在用beautifulsoup定位,代码如下:
import requests
from bs4 import BeautifulSoup
import re
url = 'http://qz.jessiepowell.top/fquiz/push/2655022/ni-de-yin-yang-bi-li-shi-duo-shao?rd=1#'
r = requests.get(url)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'html.parser')res1=soup.find_all('script')[18]
res2=res1.find_all('div')
print(res2)
出现以下问题:
D:\python\python.exe D:/PyCharm/python.py
[]
Process finished with exit code 0
因为我所要获取的内容都在<script></script>标签中,我尝试过只取div,我查看了结果,我要的内容所在div都没取到,这是为什么呢?
有人说是因为要取的内容在<script></script>标签中,这有关系吗
希望大佬指出我的问题,能够用requests和beautifulsoup帮我取一下我要的数据,现在困在这里好几天了
大佬快出现


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-24 18:03:01 | 显示全部楼层
你这个网站是动态加载的,你用beautifulsoup无法获取的,可以用 selenium模拟点击事件来爬取
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-24 18:33:33 From FishC Mobile | 显示全部楼层
如果html中全局只有一个script和div标签,这样写是可以。但是仔细看看html一开始就用外联js文件,所以不对,如果不限麻烦,可以遍历。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-24 18:37:09 From FishC Mobile | 显示全部楼层
由于script标签较多,所以增加script的属性id或class,或其他,一下子定为到数据所在scriprt内,再次基础上在匹配div和span的内容。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-24 19:20:08 | 显示全部楼层
1. 问题和答案一个 get请求获取的源码里就有,用 beautifulSoup 获取不了(其实我觉得可以获取,因为 script里也有div),可以尝试用  re/xpath
2. 答案的话是发送一个 POST 请求,参数是那些问题的你选择的答案选项,最后的数据是一个 json 格式的数据。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-25 11:49:02 | 显示全部楼层
kaohsing 发表于 2019-5-24 18:37
由于script标签较多,所以增加script的属性id或class,或其他,一下子定为到数据所在scriprt内,再次基础上 ...

s = soup.select('#quiz-show')
我用这个定位到script标签,可是得到的s是列表,貌似里面的div什么的都是字符串,这种情况怎么处理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-25 14:43:15 | 显示全部楼层
2012277033 发表于 2019-5-24 18:03
你这个网站是动态加载的,你用beautifulsoup无法获取的,可以用 selenium模拟点击事件来爬取

页面是静态的,beautifulsoup解析源码,要拿的数据都在
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-25 14:47:24 | 显示全部楼层
°蓝鲤歌蓝 发表于 2019-5-24 19:20
1. 问题和答案一个 get请求获取的源码里就有,用 beautifulSoup 获取不了(其实我觉得可以获取,因为 scrip ...

我用beautifulsoup只能获取到script标签里的,虽然script里面有div,但script里面的输出是列表类型,也就是说,我觉得script里面是字符串,那是不是用beautifulsoup获取不了列表里的字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 14:59:17 | 显示全部楼层
一穷二白 发表于 2019-5-25 11:49
s = soup.select('#quiz-show')
我用这个定位到script标签,可是得到的s是列表,貌似里面的div什么的都 ...

用bs解析这个网页,真是麻烦.
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 14:59:52 | 显示全部楼层
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019/5/25 14:53
# @Author  : KaoHsing
# @FileName: bs4.py
# @Software: PyCharm
# @QQ    :907490349

import requests
from bs4 import BeautifulSoup as bs

url = 'http://qz.jessiepowell.top/fquiz/push/2655022/ni-de-yin-yang-bi-li-shi-duo-shao?rd=1#'
html = requests.get(url).text
myhtml = html.split(r'<form action="" method="post" id="quizform">')[1].split(r'</form>')[0]
soup = bs(myhtml, 'lxml')
for li in soup.find_all('li'):
    q = li.find_all(attrs={'class': 'title-in'})[0].text
    keys = [s.string for s in li.find_all('span')]
    print(q, '============>', keys)

'''
异性初次见面,你会最先注意ta的? ============> ['脸', '鞋', '衣着', '发型', '其他']
凭感觉选一组排列让你舒适的糖豆 ============> ['黄色-左上', '橘色-右上', '绿色-左下', '蓝色-右下']
凭感觉,你觉得自己用左脑还是右脑多? ============> ['左脑', '右脑']
第一眼看到的动物是? ============> ['猫头鹰', '考拉', '狮子', '兔子', '猪', '长颈鹿', '熊', '大象', '猫']
下面哪幅图,让你有恋爱or想结婚的欲望? ============> [None, None, None, None]
选一个喜欢的动物 ============> [None, None]
你的性别是? ============> ['男', '女']



'''
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-25 18:24:08 | 显示全部楼层
kaohsing 发表于 2019-5-25 14:59
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019/5/25 14:53

那还有对应的结果啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-25 18:50:04 | 显示全部楼层
一穷二白 发表于 2019-5-25 14:47
我用beautifulsoup只能获取到script标签里的,虽然script里面有div,但script里面的输出是列表类型,也就 ...

1. 用 requests 获取的网页源码本来就是 字符串
2. bs、re、xpath 匹配本来就是对字符串进行匹配,只是各有不同的规则而已,script 下的div 它也是字符串,不存在匹配不到的 只是你没掌握方法

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 23:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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