【Python学习】Day-14 爬虫、BeautifulSoup

Python爬虫

python爬虫爬取新闻前10页的新闻

requests - 请求页面,得到响应结果
BeautifulSoup4 - 根据响应结果解析页面、提取数据写入文件、数据库
bs4 -> BeautifulSoup4

import requests
from bs4 import BeautifulSoup as bs
import openpyxl

wb =openpyxl.Workbook()
wb.create_sheet('新闻', 0)
sh = wb['新闻']
title = ['类型', '新闻', '链接', '时间']
for i in range(4):
    sh.cell(1,i+1).value = title[i]
# bs4模块能够从html或者xml中提取数据。

# headers = {}   --> headers是一个字典:{key:value}
# headers是给爬虫提供伪装的
# User-Agent  --> 将爬虫伪装成浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36 Edg/103.0.1264.37'}

count = 2
for page in range(1,11):
    url = f'https://www.chinanews.com.cn/scroll-news/news{page}.html'
    rsp = requests.get(url=url, headers=headers)
    # print(rsp)

    # 如果状态码=200,爬虫可用
    if rsp.status_code == 200:
        # 打印页面源代码(字符串类型)
        rsp.encoding = 'UTF-8'
        # print(rsp.text)
        print('网页访问正常')
        # 网页分为静态页面和动态页面
        # 静态页面:内容是写死的,除非人为对内容进行修改,否则这个页面的内容是一成不变的
        # 动态页面:内容不是写死的,使用某种特殊的技术(JavaScript) 使数据通过某种方式显示在页面中

        # requests得到的结果是静态结果。
    else:
        print(rsp.status_code)

    # BeautifulSoup(网页源码, 解析器) ---> 将字符串类型的源代码转换为bs4类型
    # bs模块提供了一系列提取数据的方法,这些方法的操作对象是bs4类型的数据
    soup = bs(rsp.text, 'html.parser')
    # print(soup)
    # select: 根据css选择器(标签、class、id等)定位数据,得到的是符合这个选择器的所有结果(整体是列表,列表中每个元素是bs4类型的数据)
    # select_one:根据css选择器(标签、class、id等)定位数据,得到的是符合这个选择器的一个结果(一个bs4类型的数据)
    # text:从bs4类型数据中提取标签内的内容
    # attrs:从bs4类型数据中提取标签内容属性值
    li_list = soup.select('body > div.w1280.mt20 > div.content-left > div.content_list > ul > li')
    # print(li_list)
    for i in li_list:
        if i.select_one('li > div.dd_lm > a') != None:
            news_type = i.select_one('li > div.dd_lm > a').text
            news_title = i.select_one('li > div.dd_bt > a').text
            news_href = 'https://www.chinanews.com.cn' + i.select_one('li > div.dd_bt > a').attrs['href']
            news_time = i.select_one('li > div.dd_time').text
            # print(news_type+'   '+news_title+'   '+news_href+'   '+news_time)
            sh.cell(count,1).value = news_type
            sh.cell(count,2).value = news_title
            sh.cell(count,3).value = news_href
            sh.cell(count,4).value = news_time
            count += 1
    
wb.save('../file/新闻.xlsx')

print('写入完成')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值