练习1: 用BeautifulSoup和requests模组爬取ptt热门看板标题

笔者很废...所以还请看到这篇练习文的大佬嘴下留情 :)

先确认BeautifulSoup4已经安装了,若是还没请:

pip3 install beautifulsoup4

安装完成后我们就可以直接打开编辑器来导入了!

import requestsimport refrom bs4 import BeautifulSoup

这里我们优先导入几个我们会用到的模组: requests, re, bs4

requests:用于请求伺服器回传资料,可用正则表达式筛选所需的资料。
beautifulsoup:方便对特定的目标加以分析、撷取的强大模组。
常用属性和方法:

tag名称 -> 传回指定tag内容,例如:sp.title 传回标籤内容text -> 传回去除所有HTML标籤的网页文字find() -> 传回第一个符合的tag。例如:sp.find('a')find_all() -> 传回所有符合的tag。例如:sp.find_all('a')select() -> 传回所有指定CSS选择器如id or class的内容,例如:以id读取用 '#':sp.select('#id')、读取class用'.' sp.select('a.classname')select_one() - >传回第一个指定...

select和find的语法差异则如下:

example_find = ex.find('div', class_ = 'title')example_select = ex.select('div.title)

现在用requests去get网页资料,建立beautifulsoup物件main后再用python内建的html.parser去解析。

hotpage = requests.get("https://www.ptt.cc/bbs/hotboards.html")main = BeautifulSoup(hotpage.text, 'html.parser')print(main.text) #这里可以print看看已抓取到除标籤外的文字

http://img2.58codes.com/2024/20114309gJfGhfzl2T.png

接着我们寻找并撷取所有board资料,然后用for迴圈一个一个列出来。(以下部分有参考自kevin8701111的虫王养成)

board_find = main.find_all('a', class_='board')# print(board_find)for board in board_select:    header_name = board.find('div', class_ = 'board-name')    print("看板表头名称:",header_name.text)    header_page = board.select('span')[0]    print("看板分类文章数:",header_page.text)    header_classes = board.find('div', class_ = 'board-class')    print("看板分类:",header_classes.text)    header_title = board.select('div.board-title')[0]    print("看板标题:",header_title.text)    header_url = 'https://www.ptt.cc' + board['href']    print("看板网址:"+ header_url)

http://img2.58codes.com/2024/20114309u1VjoOuAou.png
这边补充一下网页原始码来对照。
http://img2.58codes.com/2024/20114309rb8qpSYpbb.png
下一篇 练习2:用Session和cookie通过18岁同意条款页面


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章