bs4进行数据爬取

bs4只可以应用在python中
数据解析的原理:

  • 标签定位

  • 提取标签、标签属性中存储的数据值
    bs4数据解析的原理:

  • 1、实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

  • 2、通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

环境安装:以管理员的身份打开cmd

  • pip install bs4
  • pip install lxml

如何实例化BeautifulSoup对象:

  • from bs4 import BeautifulSoup#引包

  • 对象实例化:

  • ①:将本地的html文档中的数据加载到该对象中
    fp = open(’./text.html’,‘r’,encoding = ‘utf-8’)
    soup = BeautifulSoup(fp,‘lxml’)

  • ②:将互联网上获取的页面源码加载到该对象中
    page_text = response.text
    soup = BeautifulSoup(page_text,‘lxml’)

  • ③:爬取标签对应的内容

print(soup.a)
#soup.tagname :返回的是html中第一次出现的tagname的标签
#soup.find('tagname') :等同于soup.tagname、
#soup.find('div',class_/id='song') :定位到div中有class='song'的div
#soup.find_all('tagName') :返回符合要求的所有标签(列表)
#select:select('某种选择器 (id\class\标签。。选择器)'),返回的是一个列表
				层级选择器:soup.select('.tang > ul > li > a')[0/1/2/3]     >号代表一层,逐级递进
				‘ ’空格表示多个层级 如:soup.select('.tang > ul a')[0/1/2/3]	同上

如何获取标签之间的文本数据:
定位标签之后:soup.a.text/string/get_text()
text/get_text() : 可以获取标签中所有的文本内容
string :获取标签中直系的文本内容
实战演练
需求:爬取三国演义小说之中所有的章节标题和章节内容

import requests
from bs4 import BeautifulSoup
#需求:爬取三国演义小说的所有章节和内容
if __name__ == '__main__':
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    }
    #对首页的页面进行爬取
    url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
    page_text = requests.get(url=url,headers=headers).text
    #在首页中解析出章节的标题和详情页的url
    #1、实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
    soup = BeautifulSoup(page_text,'html.parser')
    #解析章节标题和详情页的url
    li_list = soup.select('.book-mulu > ul > li')
    fp = open('./sanguo.txt','w',encoding='utf-8')
    for li in li_list:
        title = li.a.string
        #详情页面的url
        detail_url = 'http://www.shicimingju.com'+li.a['href']
        #对详情页发起请求,解析出章节内容
        detail_page_text = requests.get(url=detail_url,headers=headers).text
        #解析出相关章节内容
        detail_soup = BeautifulSoup(detail_page_text,'html.parser')
        div_tag = detail_soup.find('div',class_='chapter_content')
        #解析到了章节的内容
        content = div_tag.text
        fp.write(title+':'+content+'\n')
        print(title,'successful!')

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
bs4是一个Python第三方模块,用于解析HTML和XML等网页文档。利用bs4可以轻松地爬取链家数据爬取链家数据的步骤如下: 1. 发送HTTP请求。使用Python的requests模块向链家网站发送一个请求,获取到需要爬取的网页的HTML代码。 2. 解析HTML代码。使用bs4模块,将获取到的HTML代码解析成对应的Python对象,使数据得以被正确提取。 3. 定位需要爬取数据。根据HTML代码的特点,通过bs4模块定位需要爬取数据的标签和属性。 4. 提取需要爬取数据。根据定位到的数据标签和属性,使用bs4模块提取需要爬取数据。 5. 存储数据。将提取到的数据以文本或者表格形式存储下来。 例如,如果要爬取深圳市南山区二手房的房价信息,可以通过以下代码实现: import requests from bs4 import BeautifulSoup # 发送请求,获取HTML代码 url = 'https://sz.lianjia.com/ershoufang/nanshanqu/pg1/' r = requests.get(url) html_doc = r.content # 解析HTML代码 soup = BeautifulSoup(html_doc, 'html.parser') # 定位需要爬取数据 house_info_list = soup.find_all('div', class_='houseInfo') price_list = soup.find_all('div', class_='unitPrice') # 提取数据 for i in range(len(house_info_list)): house_info = house_info_list[i].get_text().strip() price = price_list[i].get_text().strip() # 存储数据 print('房屋信息:%s,价格:%s' % (house_info, price)) 通过以上代码,我们就能够爬取到南山区二手房的房价信息,并将其输出到控制台上。当然,我们也可以将爬取到的信息存储到本地文件中,以便后续使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值