BeautifulSoup4的find_all()和select(),简单爬虫学习

Posted suancaipaofan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeautifulSoup4的find_all()和select(),简单爬虫学习相关的知识,希望对你有一定的参考价值。

正则表达式+BeautifulSoup爬取网页可事半功倍。

就拿百度贴吧网址来练练手:https://tieba.baidu.com/index.html

 

1.find_all():搜索当前节点的所有子节点,孙子节点。

下面例子是用find_all()匹配贴吧分类模块,href链接中带有“娱乐”两字的链接。

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re

f = urlopen(https://tieba.baidu.com/index.html).read()
soup = BeautifulSoup(f,html.parser)

for link in soup.find_all(a,href=re.compile(娱乐)):
    print(link.get(title)+:+link.get(href))
结果:
娱乐明星:/f/index/forumpark?pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
港台东南亚明星:/f/index/forumpark?cn=港台东南亚明星&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
内地明星:/f/index/forumpark?cn=内地明星&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
韩国明星:/f/index/forumpark?cn=韩国明星&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
日本明星:/f/index/forumpark?cn=日本明星&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
时尚人物:/f/index/forumpark?cn=时尚人物&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
欧美明星:/f/index/forumpark?cn=欧美明星&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
主持人:/f/index/forumpark?cn=主持人&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
其他娱乐明星:/f/index/forumpark?cn=其他娱乐明星&ci=0&pcn=娱乐明星&pci=0&ct=1&rn=20&pn=1
soup.find_all(‘a‘,href=re.compile(‘娱乐‘)) 等效于:soup(‘a‘,href=re.compile(‘娱乐‘))
上面的例子也可以用soup代替。

2.用select()循环你需要的内容:

** 搜索html页面中a标签下以“/f/index”开头的href:

for link2 in soup.select(a[href^="/f/index"]):
    print(link2.get(title)+:+link2.get(href))

**搜索html页面中a标签下以“&pn=1”结尾的href:
for link2 in soup.select(a[href$="&pn=1"]):
    print(link2.get(title)+:+link2.get(href))

**搜索html页面中a标签下包含“娱乐”的href:
for link3 in soup.select(a[href*="娱乐"]):
    print(link3.get(title)+:+link3.get(href))

 

以上是关于BeautifulSoup4的find_all()和select(),简单爬虫学习的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 BeautifulSoup4 仅获取“href”? [复制]

Beautiful Soup 4 find_all 找不到 Beautiful Soup 3 找到的链接

python爬虫beautifulsoup4系列3

将 BeautifulSoup 4 的 `find_all` 与正则表达式一起使用时,如何访问正则表达式匹配捕获组?

beautifulsoup4模块

BeautifulSoup4模块的使用