夏煜哥 发表于 2022-3-23 18:15:50

爬虫:几个拿我们老窝开刀的爬虫(2)

        众所周知,鱼C论坛没有user-agent的检测,所以很适合新手开刀......
        注:我没有任何邪恶的想法(比如以前的大规模攻击)
       

        from requests import *
import bs4
import sys

try:
    resp = get(input('请输入URL:'))
#如果出错(ValueError,404......)
except:
    print(f'Un oh......')
    sys.exit(0)#退出程序

#正常
#(1)数据分析
s = bs4.BeautifulSoup(resp.text, 'html.parser')

name = s.find('span', id='thread_subject').text#帖子名称
author = s.find('div', class_='authi').text#作者id
#查看与回复
a = s.find('div', class_ = 'hm ptn')
look_num = str(bs4.BeautifulSoup(a.text, 'html.parser')).split('|')
say_num = str(bs4.BeautifulSoup(a.text, 'html.parser')).split('|')
#个人信息
d1 = s.find('dl', class_="cl")
dts = str(bs4.BeautifulSoup(d1.text, 'html.parser'))
dts = dts.split('\n')
#UID
uid = dts[:3] + ' : ' + dts
#积分
jf = dts[-2][:2] + ' : ' + dts[-2]

#(3)打印数据

print('帖子名称:', name)
print('作者:', author)
print(look_num)
print(say_num)
print(':')
print(uid)
print(jf)



        根据注释,想必大家已经猜到这是用来爬取我们老窝的帖子与作者的信息的。其实也不难,学过小甲鱼《极客Python之效率革命【爬虫篇】》的鱼油,应该都能看懂。requests用于爬取源代码,一个get()就行。bs4用于分析数据,只要往源代码里钻就行。其中我有个bs4的小技巧:
        请注意看“dts = str(bs4.BeautifulSoup(d1.text, 'html.parser'))”这行,bs4.BeautifulSoup()用于创建BeautifulSoup对象,而我又用str()将它创建时返回的html给变成了str,这是什么操作???{:5_94:}
        重点在‘.text’这里,
        BeautifulSoup对象的text属性,是去掉了标签的html(即我们可以在浏览器看到的文字)。而我们需要的数据,大部分也都是浏览器可以看到的。而如果遇到嵌套在内层的数据,如:

<div class="z">

<a href="./" class="nvhm" title="首页">鱼C论坛</a>

</div>



        我们需要“鱼C论坛”四个字,只需按刚才的技巧就可以提取出来了。


深谙流年 发表于 2022-3-23 19:36:13

厉害厉害收藏一波{:10_256:}
页: [1]
查看完整版本: 爬虫:几个拿我们老窝开刀的爬虫(2)