鱼C论坛

 找回密码
 立即注册
查看: 1617|回复: 8

bs4爬虫的小问题,请教大神!

[复制链接]
发表于 2020-3-10 23:57:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 vallenshao 于 2020-3-11 00:01 编辑

网页上的审查元素显示的是
<td class="tsgztj">
        <span class="bw">
                <a href="/zlts/141-232-0-0-0-1_0-0-0-0-0-0-0-1.shtml">发动机</a>
        </span>
        <span class="wt">
                <a href="/zlts/141-232-0-0-0-0_18-0-0-0-0-0-0-1.shtml">爆震</a>
        </span>
</td>




我写的代码是
    for td in each.find_all('td'):
        print(td)

最终能抓取到的结果是
<td class="tsgztj">A18,</td>

并没有把td下面的span给抓取出来,其他的都正常。

而且我发现A18这个并不是随意出现的,而是指代“发动机为A,爆震为18”,因此组合起来就是A18

小白表示很好奇,网页的检查元素明明是汉字,但是抓取之后自动A18。

请问如何解决,直接抓到发动机爆震


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-11 00:51:21 | 显示全部楼层
chrome游览器
点击需要查询内容 右键审查元素
定位到需要查找内容 在内容上面点击右键 copy→copy selector

name=bs.select("粘贴到这里")
print(name)

试试这个方法看看能不能提取出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 06:38:07 From FishC Mobile | 显示全部楼层
网址?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-11 10:00:38 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 10:05:35 | 显示全部楼层
禅境通幽 发表于 2020-3-11 00:51
chrome游览器
点击需要查询内容 右键审查元素
定位到需要查找内容 在内容上面点击右键 copy→copy select ...

没太理解,请问bs是什么

网址是:http://www.12365auto.com/zlts/0-0-0-0-0-0_0-0-1.shtml
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 10:44:16 | 显示全部楼层
你用bs搜索的范围太大了,td class="tsgztj"这个类下还有span
试试
bf.find('div',id='dinfo').find('span').get_text()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 12:02:11 | 显示全部楼层
Levin-e 发表于 2020-3-11 10:44
你用bs搜索的范围太大了,td class="tsgztj"这个类下还有span
试试

还是一样,我刚才线下问了个工程师,这个是动态加载的,所以爬不出来。
只能通过selenium来操作。。也是比较复杂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 14:46:34 | 显示全部楼层
你抓取的A18 没错
这个A18 是解码一个json数据得到的具体结果
http://www.12365auto.com/js/cTypeInfo.js?version=20200311   这是json文件

var cTypeInfo = [{"id":1,"name":"发动机","value":"A","zf":"z","items":[{"id":9,"title":"异响"},{"id":11,"title":"电子油门延迟"},{"id":12,"title":"漏油"},{"id":13,"title":"机油乳化"},{"id":14,"title":"熄火"},{"id":18,"title":"爆震"},{

A是大类“发动机” 18是小类 id   然后拼接起来就是结果  发动机爆缸
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 16:20:59 | 显示全部楼层
import requests
import re
import json
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url="http://www.12365auto.com/js/cTypeInfo.js?version=20200311 "#json页面,这个页面变动可能很少,做成文本本地读取较快。内容做成字典查找更快。
response=requests.get(url,headers=headers)
response_1=response.text[16:]#去掉前面无用字母
json = json.loads(response_1)#加载
def daima(dm):
    jieguo=""
    gz_lit = dm.split(",")#分割故障代码
    for i_gz in range(len(gz_lit) - 1):#-1最后一个为空
        daima = int(gz_lit[i_gz][1:])
        for i in range(len(json)):
            if (json[i]["value"] == gz_lit[i_gz][:1]):#判断大类
                for ii in range(len(json[i]["items"])):
                    if (json[i]["items"][ii]["id"] == daima):#判断小类
                        #print(json[i]["name"], "--", json[i]["items"][ii]["title"])
                        jieguo=jieguo+json[i]["name"]+ "--"+ json[i]["items"][ii]["title"]+"  "
    return (jieguo)

url="http://www.12365auto.com/zlts/0-0-0-0-0-0_0-0-1.shtml"#主页面
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
response=requests.get(url,headers=headers)
regex = re.compile(r'<td>(.*?)</td><td bid=(.*?)>(.*?)</td><td>(.*?)</td><td class="tsjs"><a href="(.*?)" target="_blank">(.*?)</a></td><td class="tsgztj">(.*?)</td><td>(.*?)</td>',re.S)#正则
r_1 = regex.findall(response.text)#正则
for i in range(len(r_1)):
    print(r_1[i][2],"---",r_1[i][3],"---",r_1[i][5],"---",daima(r_1[i][6]),"---",r_1[i][7])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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