python爬虫入门01-爬取每日热搜

一直都特别好奇加的各种群每天发的简版新闻是从哪里获取的,
自己也来爬个热搜试试。
需求就是爬了一个百度热搜榜top30~然后把它存在本地excel里

准备工作

pip install requests
pip install re
pip install xlwt

1.拿到热点的标题

我们要访问的地址是

https://top.baidu.com/board?tab=realtime

打开以后,按F12,可以看到标题的格式都是如下图这样的结构
在这里插入图片描述

这里讲一下正则表达式的基础内容

  • . 表示匹配后一位
  • *是通配符,匹配若干个字符,也包含0
  • ?是通配符,匹配0个或1个字符
  • 括号表示只返回匹配值
    举例: A (.?) B提取AB中间的内容
    在这个格式里,我们可以用 (.
    ?) 直接拿到标题
title = re.findall('class="c-single-text-ellipsis"> (.*?)<' , reps.text)

这样拿到的数据是一个列表,格式是[‘’,‘’,‘’]

2. 拿到热点的访问地址

除了拿标题,我们还可以把网址也提取出来,标题的格式如下
在这里插入图片描述
也可以用正则直接拿出来

add = re.findall('href="(.*?)"',reps.text)

拿到的数据也是一个列表。但是这个地址并不都是我想要的
把他打印出来,

for i in range(0,len(add)):
    a=a+1
    print(a,add[i])

发现前面后面都有一些不需要的网址,
在这里插入图片描述
然后观察发现地址很多是重复的,所以也需要在拿出想要的数据后,做一个去重:

a=0
add_new=[] #申明一个列表
for i in range(25,len(add)-7):#匹配到很多地址,只拿需要的部分
    a=a+1
    add_new.append(add[i])#把地址装进一个列表
add_new01 =[]#重新定义一个列表来装去重之后的数据
for i in add_new:
    if i not in add_new01:
        add_new01.append(i)

3.将标题和地址组装起来

因为就俩数据,可以直接使用字典组装

dic1={}
for i in range(0,30):
    dic1[title[i]]=add_new01[i]#将标题和地址一一对应

4.保存excel

首先创建一个对象

excel1= xlwt.Workbook() #创建workbook对象

然后是工作表

wooksheet= excel1.add_sheet('百度热榜top30', cell_overwrite_ok=True) #创建工作表

定义列名,然后写入标题是第0行,第0列,网址是第0行第1列

head = ['标题','网址']
for h in range(0,2):
    wooksheet.write(0,h,head[h])

然后把第三步已经组装好的标题和地址写入
因为刚刚列名已经把第0行用了,所以现在要从第一行row=1开始

row=1
for k, v in dic1.items():
    wooksheet.write(row,0,k) #把标题写入
    wooksheet.write(row,1,v) #把地址写入
    row += 1 #换行

保存,地址可以写相对也可以写绝对

excel1.save('./百度热搜top30.xls')#定义保存的地址

就此执行之后,就在目录下生成了xls文件
打开检查一下,爬的没问题

5.遇到的问题

我觉得最大的问题就是拿网址那里,观察了几天,发现有时候前面不需要的网址的个数是会变的。暂时没想到什么好办法。。或许可以通过长度来判断?…

6. 完整代码

以下是完整代码~

 # -*- coding: utf-8 -*-#
import requests
import re
import xlwt
url = 'https://top.baidu.com/board?tab=realtime'  # 要爬取的网页链接
reps = requests.get(url)
#1.对标题进行处理
title = re.findall('class="c-single-text-ellipsis"> (.*?)<' , reps.text)
#2. 对数据地址进行处理
add = re.findall('href="(.*?)"',reps.text)
a=0
add_new=[] #申明一个列表
for i in range(33,len(add)-7):#匹配到很多地址,只拿需要的部分
    a=a+1
    add_new.append(add[i])#把地址装进一个列表
#add_new=list(set(add_new))#用集合的方式去重.得到新的去重了的地址add_new,格式是列表。后来发现这种方式会打乱顺序,所以注释掉了
add_new01 =[]#重新定义一个列表来装去重之后的数据
for i in add_new:
    if i not in add_new01:
        add_new01.append(i)
#3.创建一个字典组装标题和地址
dic1={}
for i in range(0,30):
    dic1[title[i]]=add_new01[i]#将标题和地址一一对应
#4.保存到excel
excel1= xlwt.Workbook() #创建workbook对象
wooksheet= excel1.add_sheet('百度热榜top30', cell_overwrite_ok=True) #创建工作表
head = ['标题','网址']
for h in range(0,2):
    wooksheet.write(0,h,head[h])
row=1
for k, v in dic1.items():
    wooksheet.write(row,0,k) #把标题写入
    wooksheet.write(row,1,v) #把地址写入
    row += 1 #换行
excel1.save('百度热搜top30.xls')#定义保存的地址

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Python 爬虫教程,可以批量爬取指定网站的图片: 首先,我们需要安装 requests 和 BeautifulSoup 这两个库。可以通过以下命令进行安装: ``` pip install requests pip install beautifulsoup4 ``` 接下来,我们需要编写代码。以下是一个示例代码,可以爬取指定网站的图片并保存到本地: ```python import requests from bs4 import BeautifulSoup import os # 爬取图片的网站 url = "https://www.example.com/" # 请求头,模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} # 发送请求,获取网页内容 response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 创建保存图片的文件夹 if not os.path.exists("images"): os.makedirs("images") # 遍历所有的图片标签,获取图片链接并保存到本地 for img in soup.find_all("img"): img_url = img.get("src") if img_url.startswith("http"): response = requests.get(img_url) with open("images/" + os.path.basename(img_url), "wb") as file: file.write(response.content) print("已保存图片:", img_url) ``` 在上述代码中,我们首先定义了要爬取的网站的 URL。然后,我们使用 requests 库发送一个 GET 请求,获取网页的 HTML 内容。接着,我们使用 BeautifulSoup 库对 HTML 进行解析,获取所有的图片标签。最后,我们使用 requests 库再次发送 GET 请求,获取图片的二进制数据,并保存到本地的 images 文件夹中。 注意,这里我们使用了一个 if 判断来过滤掉非 HTTP 开头的图片链接,以避免出现下载错误的情况。 为了更好的用户体验,代码中还加入了一些注释,方便大家理解。 希望这个简单的 Python 爬虫教程能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值