python爬虫-BeautifulSoup4的使用

BeautifulSoup4

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

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

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

from bs4 import BeautifulSoup
import requests
user-agent怎样获取的这里我就不多说了,大家应该都知道哈,下面接着来
URL = fhttps://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 = fhttps://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)

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

经验分享 程序员 微信小程序 职场和发展