各位早安,书接上回我们已经知道抓取想要的网页资讯的逻辑了,也成功抓到了,今天我们的目标是抓取一整页文章标题
一样以 PTT 股票版为例
继续加强我们的程序
我们先打开原始码看看标题在哪
可以看到跟昨天文章内容不一样 因为这上面的资讯都是实时更新的
我们要的标题位置以中钢纪念品为例
一样右键检视网页原始码 接着按 CTRL+F
就会出现可以查询文字的地方
打上要搜寻的 中钢纪念品 它就会显示文字位置
可以看到它是在 < div class="title" > 标签内
所以程序码後面加上
titles = data.find("div", class_ = "title")
建立 titles 变数存放我们的资料
资料从 data 里解析过的资料内 抓取 标签为 < div > 且 class = "title" 的资料
也就是我们刚刚看到 中钢纪念品 的位置
因为我做这篇时间太久
所以 PTT 更新了
但是我们要抓的依旧是文章标题没错
等等应该会抓到这个标题
到时候你们抓到的会是你们网页开起来後的第一个标题
最後把 print 内改成 titles
程序码目前是这样
import requests
import bs4
url = "https://www.ptt.cc/bbs/Stock/index.html"
#抓PTT股票版的网页原始码
request = requests.get(url)
#将网页资料利用requests套件GET下来
data = bs4.BeautifulSoup(request.text, "html.parser")
titles = data.find("div", class_ = "title")
print(titles)
#解析网页原始码
执行 python crawler.py
成功印出了 但是有讨厌的标签在不好看
那如果想要去掉标签
就要再往内指定
把 print(titles) 改成 print(titles.a.text)
因为可以看到我们要的文字部分是在 < div > 标签内的 < a > 标签里
而变数 titles 本身就已经指定到 < div > 标签内了
所以再 .a 就好
最後的 .text 则是指定 < a > 标签内的文字部分
就像这样 成功只剩下文字了
但是我们要看不会只看第一个标题吧
所以要整页的标题就要 把 titles = data.find 改成 titles = data.find_all
就是从找到一个变成找到全部
但是光这样不行 直接执行会喷错
因为现在 titles 内有好几个 < div > 标签跟 < a > 标签
所以要用 for 回圈一个一个印出来
最後就像这样 得到整页的文章标题了
如果在执行上遇到错误 代表文章中有已经被删除的
因为被删除的文章没有 a 标签 程序会找不到目标就喷错
必须在 for 回圈中加一个 if 用来去掉没标题的文章
改成这样就可以了
可以看到没有喷错 剩下的文章标题也正常印出
今天的程序码
import requests
import bs4
url = "https://www.ptt.cc/bbs/Stock/index4991.html"
#抓PTT股票版的网页原始码
request = requests.get(url)
#将网页资料利用requests套件GET下来
data = bs4.BeautifulSoup(request.text, "html.parser")
titles = data.find_all("div", class_ = "title")
#解析网页原始码
for title in titles:
if title.a != None:
print(title.a.string)
#利用for回圈印出全部并筛选掉已被删除的文章
今天我们已经能印出整页所有标题 而且没有标签影响美观 也筛选掉已删除的文章
明天我们要来实作更进阶的功能
贩毒比吸毒判刑更重喔 (珍爱生命远离毒品 碰了不只犯法还会变笨喔)
你希望另一半比自己年长还年轻呢
还记得做专案时,为了要与非IT专业的高层人士沟通,我们常常需要画业务流程图, 从开始、结束、程序、路...
先简单回顾一下,今天预计分析的题目: Swap Nodes in Pairs 题目连结:https...
今天跟大家分享将Synology NAS DS920+透过SNMP加入监控 因为今年 Google ...
渗透测试流程 与客户进行签约,取得合法的测试权限後,以下为签约与接洽需要注意: 企业是否了解渗透测...
爬虫原理: 抓取资料->分析结构->取出要的结构文字->输出想要的格式 程序码: ...