生活, 其他记录

爬虫基础BeautifulSoup

本篇给出爬虫基础的代码例子,使用 BeautifulSoup,代码改写自参考资料[1]。

from bs4 import BeautifulSoup
from urllib.request import urlopen

# 最简单的情况
html = urlopen("https://mofanpy.com/static/scraping/basic-structure.html").read().decode('utf-8')
print('\n显示网页的代码信息1:\n\n ----------------开始----------------\n', html, '\n\n----------------结束----------------')  # 显示网页的代码信息

soup = BeautifulSoup(html, features='lxml')   # 把网页放进BeautifulSoup
print('\n获取标签_标题h1_中的内容soup.h1:\n', soup.h1)
print('\n获取标签_段落p_中的内容soup.p:\n', soup.p)
print('\n获取标签_链接a_中的内容soup.a:\n', soup.a)

all_href = soup.find_all('a')
print('\n获取所有"a标签"的内容soup.find_all(‘a’):\n', all_href)

print('\n获取某个字典的值_1:')
for a in all_href:
    print(a)
    print(a['href'])

all_href = [a['href'] for a in all_href]
print('\n获取某个字典的值_2:\n', all_href, '\n')




# 加入CSS内容
html = urlopen("https://mofanpy.com/static/scraping/list.html").read().decode('utf-8')
print('\n显示网页的代码信息2:\n\n ----------------开始----------------\n', html, '\n\n----------------结束----------------')  # 显示网页的代码信息

soup = BeautifulSoup(html, features='lxml')  # 把网页放进BeautifulSoup

print('\n利用class筛选出所需要的信息:')
month = soup.find_all('li', {"class": "month"})
print(month, '\n')

print('只显示文本:')
for m in month:
    print(m.get_text())

print('\n 多次筛选:')
january = soup.find('ul', {"class": 'jan'})
print(january, '\n')
d_january = january.find_all('li')  # use january as a parent
print(d_january, '\n')
for d in d_january:
    print(d.get_text())

运行结果:

显示网页的代码信息1:

 ----------------开始----------------
 <!DOCTYPE html><html lang="cn"> <head><meta charset="UTF-8"><title>Scraping tutorial 1 | 莫烦Python</title><link rel="icon" href="/static/img/description/tab_icon.png"></head> <body> <h1>爬虫测试1</h1> <p> 这是一个在 <a href="/">莫烦Python</a> <a href="/tutorials/data-manipulation/scraping/">爬虫教程</a> 中的简单测试. </p> </body> </html>  

----------------结束----------------

获取标签_标题h1_中的内容soup.h1:
 <h1>爬虫测试1</h1>

获取标签_段落p_中的内容soup.p:
 <p> 这是一个在 <a href="/">莫烦Python</a> <a href="/tutorials/data-manipulation/scraping/">爬虫教程</a> 中的简单测试. </p>

获取标签_链接a_中的内容soup.a:
 <a href="/">莫烦Python</a>

获取所有"a标签"的内容soup.find_all(‘a’):
 [<a href="/">莫烦Python</a>, <a href="/tutorials/data-manipulation/scraping/">爬虫教程</a>]

获取某个字典的值_1:
<a href="/">莫烦Python</a>
/
<a href="/tutorials/data-manipulation/scraping/">爬虫教程</a>
/tutorials/data-manipulation/scraping/

获取某个字典的值_2:
 ['/', '/tutorials/data-manipulation/scraping/'] 


显示网页的代码信息2:

 ----------------开始----------------
 <!DOCTYPE html><html lang="cn"> <head><meta charset="UTF-8"><title>爬虫练习 列表 class | 莫烦 Python</title><style>
    .jan {
      background-color: yellow;
    }

    .feb {
      font-size: 25px;
    }

    .month {
      color: red;
    }
  </style></head> <body> <h1>列表 爬虫练习</h1> <p>这是一个在 <a href="/">莫烦 Python</a> 的 <a href="/tutorials/data-manipulation/scraping/">爬虫教程</a> 里无敌简单的网页, 所有的 code 让 你一目了然, 清晰无比.</p> <ul> <li class="month">一月</li> <ul class="jan"> <li>一月一号</li> <li>一月二号</li> <li>一月三号</li> </ul> <li class="feb month">二月</li> <li class="month">三月</li> <li class="month">四月</li> <li class="month">五月</li> </ul> </body> </html>

----------------结束----------------

利用class筛选出所需要的信息:
[<li class="month">一月</li>, <li class="feb month">二月</li>, <li class="month">三月</li>, <li class="month">四月</li>, <li class="month">五月</li>]

只显示文本:
一月
二月
三月
四月
五月

 多次筛选:
<ul class="jan"> <li>一月一号</li> <li>一月二号</li> <li>一月三号</li> </ul>

[<li>一月一号</li>, <li>一月二号</li>, <li>一月三号</li>]

一月一号
一月二号
一月三号

参考资料:

[1] https://mofanpy.com/tutorials/data-manipulation/scraping/

780 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code