当前位置:   article > 正文

Python爬虫:使用BeautifulSoup解析网页(基础+实例)_soup = beautifulsoup(html, 'html.parser') extracte

soup = beautifulsoup(html, 'html.parser') extracted_tags = soup.find_all(is_

1.如何定位元素

1.1 直接提取

soup('标签名') 
  • 1
soup.find('标签名') --直接是值
  • 1
soup.find_all('标签名') --列表
  • 1

1.2 CSS定位器

(1)class定位元素

soup.select(div.属性)
  • 1

(2)id定位

soup.select(div#属性)
  • 1

(3)嵌套定位

soup.select(div > ul > li)
  • 1

举例

sentence = soup.select('div.left > div.sons > div.cont')
 #提取出来的tag组成了一个列表,即sentence是一个列表,它里面有50个tag数据
 print(len(sentence))
 print(type(sentence[0]))
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2. 如何提取文本

上面方法提取的结果都是tag类型,因此提取文本都是从tag中提取。

tag.get_text()
  • 1

3. 如何提取属性

tag.get('属性名')
  • 1

4. 实例

以爬取古诗词网名句栏目前5页(共250句)及其各名句所链接的古诗词原文(5*50=250首)为例
https://so.gushiwen.org/mingju/
在这里插入图片描述

import requests
import re
from lxml import etree
from bs4 import BeautifulSoup
import time

#函数1:请求网页
def page_def(url,ua):
    resp = requests.get(url,headers = ua)
    #print("请求状态:%d"%(resp.status_code))
    html = resp.content.decode('utf-8')
    return html

#函数2:解析网页
def info_def(html):
    soup = BeautifulSoup(html,'html.parser') #html.parser 为解析器
    title = soup('title') 
    #soup.find('标签名') --直接是值
    #soup.find_all('标签名') --列表
    
    sentence = soup.select('div.left > div.sons > div.cont > a:nth-of-type(1)')
    #提取出来的tag组成了一个列表,即sentence是一个列表,它里面有50个tag数据
    poet = soup.select('div.left > div.sons > div.cont > a:nth-of-type(2)')

    sentence_list=[]
    href_list=[]
    for i in range(len(sentence)):
        temp = sentence[i].get_text()+ "---"+poet[i].get_text()
        sentence_list.append(temp)
        href = sentence[i].get('href')
        href_list.append("https://so.gushiwen.org"+href)
    return [href_list,sentence_list]

#函数3:写入文本文件
def txt_def(info_list):
    import json
    with open(r'C:\Users\HP\Desktop\sentence.txt','a',encoding='utf-8') as df:
        for one in info_list[1]:
            df.write(json.dumps(one,ensure_ascii=False)+'\n\n')

#子网页处理函数:进入并解析子网页/请求子网页
def request_sub_page(info_list):
    subpage_urls = info_list[0]
    #print(subpage_urls)
    ua = {'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'}
    sub_html = []
    for url in subpage_urls:
        html = page_def(url,ua)
        sub_html.append(html)
    return sub_html

#子网页处理函数:解析子网页,爬去诗句内容
def sub_page_def(sub_html):
    poem_list=[]
    for html in sub_html:
        soup = BeautifulSoup(html,'html.parser')
        poem = soup.select('div.left > div.sons > div.cont > div.contson')
        poem = poem[0].get_text()
        poem_list.append(poem.strip())
    return poem_list

#子网页处理函数:保存诗句到txt
def sub_page_save(poem_list):
    import json
    with open(r'C:\Users\HP\Desktop\poems.txt','a',encoding='utf-8') as df:
        for one in poem_list:
            df.write(json.dumps(one,ensure_ascii=False)+'\n\n')

if __name__ == '__main__':
    print("**************开始古诗文网站爬虫********************")
    ua = {'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'}
    for i in range(1,6):
        url = 'https://so.gushiwen.org/mingju/default.aspx?p=%d&c=&t='%(i)
        time.sleep(1)
        html = page_def(url,ua)
        info_list = info_def(html)
        txt_def(info_list)
        #print(info_list)
        #开始处理子网页
        print("开始解析第%d"%(i)+"页")
    
        #开始解析名句子网页
        sub_html = request_sub_page(info_list)
        poem_list = sub_page_def(sub_html)
        sub_page_save(poem_list)
        
    print("****************爬取完成***********************")
    print("共爬取%d"%(i*50)+"个古诗词名句,保存在如下路径:C:\\Users\\HP\\Desktop\\sentence.txt")
    print("共爬取%d"%(i*50)+"个古诗词,保存在如下路径:C:\\Users\\HP\\Desktop\\poem.txt")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/417523
推荐阅读
相关标签
  

闽ICP备14008679号