天天看點

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程

作者:Irain

QQ:2573396010

微信:18802080892

GitHub項目連結:https://github.com/Irain-LUO/Scrapy_Study.

視訊資源連結:https://www.bilibili.com/video/BV1P4411f7rP?p=28

爬取目标網頁連結:微軟版本的國内谷歌

目錄

      • 1 BeautifulSoup4庫内容
        • 1.1BeautifulSoup4解析成樹狀圖
        • 1.2 解析工具比較
      • 2 BeautifulSoup4筆記
      • 3 BeautifulSoup4示例:通路網頁https://cn.bing.com/
        • 3.1 擷取所有div标簽
        • 3.2 擷取第2個div标簽
        • 3.3 擷取所有class等于oml_img的div标簽
          • 3.3.1 擷取所有class等于oml_img的div标簽方法一
          • 3.3.2 擷取所有class等于oml_img的div标簽方法二
        • 3.4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
          • 3.4.1 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法一
          • 3.4.2 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法二
        • 3.5 獲得所有a标簽的href屬性
          • 3.5.1 獲得所有a标簽的href屬性方法一
          • 3.5.2 獲得所有a标簽的href屬性方法二
        • 3.6 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串
          • 3.6.1 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法一
          • 3.6.2 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法二
        • 3.7 獲得class=sc_hl1 hp_head_nav的ul标簽所有的字元串

1 BeautifulSoup4庫内容

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程

1.1BeautifulSoup4解析成樹狀圖

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程

1.2 解析工具比較

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程

2 BeautifulSoup4筆記

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程

3 BeautifulSoup4示例:通路網頁https://cn.bing.com/

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
import requests
from bs4 import BeautifulSoup
headers = {
        'Usr-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
        'cookie':'__guid=240418321.2698196731532421000.1585372730409.6943; sid=654461e8-539a-4ec3-a2c6-a2ecd5adab8d; Hm_lvt_2c8ad67df9e787ad29dbd54ee608f5d2=1585372731; monitor_count=4; Hm_lpvt_2c8ad67df9e787ad29dbd54ee608f5d2=1585372875',        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding':'gzip, deflate',
        'Accept-Language':'zh-CN,zh;q=0.9',
        'Cache-Control':'max-age=0',
        'Connection':'keep-alive'
    }
url = "https://cn.bing.com/" # 微軟版的國内谷歌
response = requests.get(url=url, headers=headers) # 通路網址
html = response.text
soup = BeautifulSoup(html, 'lxml')  #BeautifulSoup4解析網頁
           

3.1 擷取所有div标簽

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 1 擷取所有div标簽
print('='*30, "1 擷取所有div标簽", '='*30)
divs = soup.find_all('div')
i = 1
for div in divs:
    print("第{}個div标簽:".format(i),div)
    print('='*88)
    i += 1
           

3.2 擷取第2個div标簽

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 2 擷取第2個div标簽
print('='*30, "2 擷取第2個div标簽", '='*30)
div = soup.find_all('div', limit=2)[1] # limit=2:隻獲得兩個div标簽
print("擷取第2個div标簽:",div)
print('='*88)
           

3.3 擷取所有class等于oml_img的div标簽

3.3.1 擷取所有class等于oml_img的div标簽方法一
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 3 擷取所有class等于oml_img的div标簽
print('='*30, "3 擷取所有class等于oml_img的div标簽方法一", '='*30)
divs = soup.find_all('div', class_='oml_img')
i = 1
for div in divs:
    print("第{}個div标簽:".format(i),div)
    print('='*88)
    i += 1
           
3.3.2 擷取所有class等于oml_img的div标簽方法二
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 3 擷取所有class等于oml_img的div标簽
print('='*30, "3 擷取所有class等于oml_img的div标簽方法二", '='*30)
divs = soup.find_all('div', attrs={'class':'oml_img'})
i = 1
for div in divs:
    print("第{}個div标簽:".format(i),div)
    print('='*88)
    i += 1
           

3.4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽

3.4.1 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法一
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
print('='*30, "4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法一", '='*30)
divs = soup.find_all('div', attrs={'class':'oml_img', 'id':'officemenu_people_img'})
i = 1
for div in divs:
    print("第{}個div标簽:".format(i),div)
    print('='*88)
    i += 1
           
3.4.2 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法二
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽
print('='*30, "4 擷取所有class等于oml_img且id=officemenu_people_img的div标簽方法二", '='*30)
divs = soup.find_all('div', class_='oml_img', id='officemenu_people_img')
i = 0
for div in divs:
    print("第{}個div标簽:".format(i),div)
    print('='*88)
    i += 1
           

3.5 獲得所有a标簽的href屬性

3.5.1 獲得所有a标簽的href屬性方法一
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 5 獲得所有a标簽的href屬性
print('='*30, "5 獲得所有a标簽的href屬性方法一", '='*30)
aLists = soup.find_all('a')
for a in aLists:
    href = a['href']
    print(href)
           
3.5.2 獲得所有a标簽的href屬性方法二
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 5 獲得所有a标簽的href屬性
print('='*30, "5 獲得所有a标簽的href屬性方法二", '='*30)
aLists = soup.find_all('a')
for a in aLists:
    href = a.attrs['href']
    print(href)
           

3.6 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串

3.6.1 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法一
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽中的a标簽的字元串
print('='*30, "6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽的a标簽的字元串方法一", '='*30)
lis = soup.find_all('ul',class_='sc_hl1 hp_head_nav')[0]
for li in lis:
    try:  # 存在一個li标簽中沒有a标簽
        a = li.find_all('a')  #  擷取a标簽
        str = a[0].string #  擷取a标簽的字元
        print(str)
    except:
        str = li.string  # 擷取li标簽的字元
        print(str)
           
3.6.2 獲得class=sc_hl1 hp_head_nav的ul标簽中li标簽的a标簽的字元串方法二
14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽中的a标簽的字元串
print('='*30, "6 獲得class=sc_hl1 hp_head_nav的ul标簽中所有li标簽的a标簽的字元串方法二", '='*30)
lis = soup.find_all('ul',class_='sc_hl1 hp_head_nav')[0]
print(lis.strings)
for li in lis:
    # 在這裡:li.strings與li.stripped_strings效果一樣。bing.com網頁暫無發現合适元素作為示例。
    str = list(li.stripped_strings)[0] # stripped_strings:去除空字元(隻有換行符'\n',也算是空字元)
    print(str)
           

3.7 獲得class=sc_hl1 hp_head_nav的ul标簽所有的字元串

14.1 BeautifulSoup4--scrapy爬蟲初學者學習過程
# 7 獲得class=sc_hl1 hp_head_nav的ul标簽中所有的字元串
print('='*30, "7 獲得class=sc_hl1 hp_head_nav的ul标簽所有的字元串", '='*30)
lis = soup.find_all('ul',class_='sc_hl1 hp_head_nav')[0]
str = lis.get_text()
print(type(str))
print(str)
           

釋出:2020年5月13日