爬虫怎麽爬 从零开始的爬虫自学 DAY20 python网路爬虫开爬-3抓取整页标题

前言

各位早安,书接上回我们已经知道抓取想要的网页资讯的逻辑了,也成功抓到了,今天我们的目标是抓取一整页文章标题

开爬-整页标题抓取

一样以 PTT 股票版为例
继续加强我们的程序
我们先打开原始码看看标题在哪
https://ithelp.ithome.com.tw/upload/images/20211002/20140149SVMQ6zaQ1t.jpg
可以看到跟昨天文章内容不一样 因为这上面的资讯都是实时更新的
我们要的标题位置以中钢纪念品为例

一样右键检视网页原始码 接着按 CTRL+F
就会出现可以查询文字的地方
打上要搜寻的 中钢纪念品 它就会显示文字位置
https://ithelp.ithome.com.tw/upload/images/20211002/20140149Puv2Liv0SG.jpg
可以看到它是在 < div class="title" > 标签内

所以程序码後面加上

titles = data.find("div", class_ = "title")

建立 titles 变数存放我们的资料
资料从 data 里解析过的资料内 抓取 标签为 < div > 且 class = "title" 的资料
也就是我们刚刚看到 中钢纪念品 的位置

因为我做这篇时间太久
所以 PTT 更新了
但是我们要抓的依旧是文章标题没错
https://ithelp.ithome.com.tw/upload/images/20211002/20140149eVYNKYUCR5.jpg
等等应该会抓到这个标题
到时候你们抓到的会是你们网页开起来後的第一个标题

最後把 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
https://ithelp.ithome.com.tw/upload/images/20211002/20140149Z9dSc2eZYT.jpg
成功印出了 但是有讨厌的标签在不好看

那如果想要去掉标签
就要再往内指定
把 print(titles) 改成 print(titles.a.text)
因为可以看到我们要的文字部分是在 < div > 标签内的 < a > 标签里
而变数 titles 本身就已经指定到 < div > 标签内了
所以再 .a 就好
最後的 .text 则是指定 < a > 标签内的文字部分
https://ithelp.ithome.com.tw/upload/images/20211002/2014014935NEYEwKVK.jpg
就像这样 成功只剩下文字了

但是我们要看不会只看第一个标题吧
所以要整页的标题就要 把 titles = data.find 改成 titles = data.find_all
就是从找到一个变成找到全部
但是光这样不行 直接执行会喷错
因为现在 titles 内有好几个 < div > 标签跟 < a > 标签
所以要用 for 回圈一个一个印出来
https://ithelp.ithome.com.tw/upload/images/20211002/20140149B1wwDsS54Y.jpg
最後就像这样 得到整页的文章标题了

如果在执行上遇到错误 代表文章中有已经被删除的
https://ithelp.ithome.com.tw/upload/images/20211003/201401495u1aefbXPP.jpg
因为被删除的文章没有 a 标签 程序会找不到目标就喷错
必须在 for 回圈中加一个 if 用来去掉没标题的文章

改成这样就可以了
https://ithelp.ithome.com.tw/upload/images/20211003/201401490rqPs8Gz9r.jpg
可以看到没有喷错 剩下的文章标题也正常印出

今天的程序码

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回圈印出全部并筛选掉已被删除的文章

今天我们已经能印出整页所有标题 而且没有标签影响美观 也筛选掉已删除的文章
明天我们要来实作更进阶的功能


早安闲聊区

你知道吗?

贩毒比吸毒判刑更重喔 (珍爱生命远离毒品 碰了不只犯法还会变笨喔)

每日二选一

你希望另一半比自己年长还年轻呢


<<:  Day-20 CheckBox

>>:  Android学习笔记25

Day04. 年後想换工作,104有RPA热门职缺,怎麽办? - 赶快开始BP Hello World 吧!

还记得做专案时,为了要与非IT专业的高层人士沟通,我们常常需要画业务流程图, 从开始、结束、程序、路...

【第十五天 - Linked list 题目分析】

先简单回顾一下,今天预计分析的题目: Swap Nodes in Pairs 题目连结:https...

Day 08. Zabbix 设定 SNMP 监控 Synology NAS DS920+

今天跟大家分享将Synology NAS DS920+透过SNMP加入监控 因为今年 Google ...

Day2 渗透测试流程与相关规范

渗透测试流程 与客户进行签约,取得合法的测试权限後,以下为签约与接洽需要注意: 企业是否了解渗透测...

Python -今天我想来点爬虫程序

爬虫原理: 抓取资料->分析结构->取出要的结构文字->输出想要的格式 程序码: ...