python爬虫-BeautifulSoup4的使用

BeautifulSoup4

BeautifulSoup4 - 根据响应结果解析页面,提取数据
首先需下载:BeautifulSoup4,requests

注意:因为BeautifulSoup是被封装在bs4里面的,所以我们需要从bs4引入模块

下面我们一起来使用 BeautifulSoup + requests 爬取中国新闻网来实践一下

from bs4 import BeautifulSoup
import requests

user-agent怎样获取的这里我就不多说了,大家应该都知道哈,下面接着来

URL = f'https://www.chinanews.com.cn/scroll-news/news1.html'

# headers = {} --> 字典
# headers是给爬虫提供伪装的
# User-Agent --> 将爬虫伪装成游览器
Headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
response = requests.get(url=URL, headers=Headers)

response.status_codes:是请求页面后返回来的状态码

# 这里我们对比页面返回的状态码是否等于200
if response.status.code == 200:
	# 请求成功后,我们可以打印页面源码是否正常
	# print(response.text)
	# 如果出现乱码可查看网页charset是哪种编码格式,这里的我看了是utf-8
	response.encoding = 'utf-8'

BeautifulSoup(源码, 解析器) - 将字符串类型的源代码转换为bs4类型
bs模块提供了一系列提取数据的方法,这些方法的操作对象的bs4类型的数据

soup = BeautifulSoup(response.text, 'html.parer'
)
'''
	select:根据css选择器(标签,class,id等)定位数据,
	得到的是符合这个选择器的所有结果(整体是一个列表,
	每一个元素是bs4类型的数据)
	
	select_one:根据css选择器(标签,class,id等)定位数据,
	得到的是符合这个选择器的一个结果(是一个bs4类型的数据)
'''
li_list = soup.select('body > div.w1280.mt20 > .content-left > .content_list > ul > li')
for i in li_list:
	'''
		text:从bs4类型中提取标签内的内容,结果为str
	    attrs:从bs4类型数据中提取标签内容属性值
	'''
    if i.select_one('li > div.dd_lm > a') != None:
        new_type = i.select_one('li > div.dd_lm > a').text
        # print(new_type)
        new_title = i.select_one('li > div.dd_bt > a').text
        # print(new_title)
        new_href = 'https://www.chinanews.com.cn' + i.select_one('li > div.dd_bt > a').attrs['href']
        # print(new_href)
        new_time = i.select_one('li > div.dd_time').text

由于这个新闻网有10页那么我们就需要将page进行变换,只需要放进循环即可

在这里插入图片描述

下面是全部代码:

import csv
import requests
from bs4 import BeautifulSoup

news_list = []
for page in range(1, 11):
    print(f'-----------第{page}页-------------')
    URL = f'https://www.chinanews.com.cn/scroll-news/news{page}.html'
    Headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    }
    response = requests.get(url=URL, headers=Headers)
    if response.status_code == 200:
        response.encoding = 'utf-8'
        soup = BeautifulSoup(response.text, "html.parser")
        li_list = soup.select('body > div.w1280.mt20 > .content-left > .content_list > ul > li')
        for i in li_list:
            if i.select_one('li > div.dd_lm > a') != None:
                new_type = i.select_one('li > div.dd_lm > a').text
                # print(new_type)
                new_title = i.select_one('li > div.dd_bt > a').text
                # print(new_title)
                new_href = 'https://www.chinanews.com.cn' + i.select_one('li > div.dd_bt > a').attrs['href']
                # print(new_href)
                new_time = i.select_one('li > div.dd_time').text
                # print(new_time)
                lin = [new_type, new_title, new_href, new_time]
                print(lin)

运行结果如下:
在这里插入图片描述
:到这里就结束了,大家可以把爬取出来的数据保存到本地文件里,在下一章节我将为大家讲解如何保存将数据保存到本地文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值