Python爬虫学习笔记 (2) [初级] 初识 requests + bs4 + re

这篇博客介绍了如何使用Python的requests库下载网页源代码,结合BeautifulSoup (bs4) 和正则表达式(re)解析和提取信息,以及保存数据到txt文件。博主通过爬取一个模板网站的前5页,展示了爬虫的基本流程和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新日期:2021.03.12

本节学习内容

  1. 爬取网页(第一页)的源代码:初步了解 requests 的使用。
  2. 解析代码:初步了解 BeautifulSoup (bs4) 和 re 的使用。
  3. 保存信息: 先用最简单的文件类型 txt。
  4. 爬取,解析并保存余下的网页。

目录

  • 1. 下载第一个网页的源代码
  • 2. 解析代码
  • 3. 保存信息
  • 4. 爬取,解析并保存余下的网页
  • 5. 总结

1. 下载第一个网页的源代码

需要安装 requests库

import requests

url = 'http://www.tuke88.com/soexcel/qingdan/__zonghe_0_1.shtml'
headers= {'User Agent': 'replace with your own header'}
response = requests.get(url, headers)
if response.status_code == 200: #检查状态是否正常,只有“200”代码表示正常状态
    print(response.text) #如果状态不正常,需要进一步考虑怎样处理

找目标:找到一个符合爬虫小白的网页好难🙈🙈…知乎, 猫眼, 有的需要登录, 有的需要动态下载, 有的网页按F12查看源码时妥妥的,下载下来就是乱码,或者根本下载不下来。了解了爬虫进阶的知识,知道这些都是反扒手段,暂时先避开。

headers: 用于告诉服务器访问者的信息。如果不使用代理, 就直接把自己的信息填上。
怎样找到自己的headers: 打开一个网页, 右键 F12, 点击 “Network” 选项卡, 在右下侧的框里点击 “Headers” 选项卡, 在 “Request Headers” 一栏的最下面就是 “User-Agent”, 把这个copy到代码里。
在这里插入图片描述
使用 get 请求下载一个网页的源代码, requests.get(url, headers)。仅当状态码正常时(==200)才打印。打印后, 和网页上 “Response” 页面代码大概对比下, 应该是一样的。如果有差别, 说明这个网页还不适合作为 Hello World 来操练~~
在这里插入图片描述
在PyCharm运行结果里 Ctrl + F 比对一下, 都在啦~~~
在这里插入图片描述

2. 解析代码

需要安装 bs4 和 lxml 库

分析目标网页,以及目标信息出现的规律,确定解析工具和方法

web页面布局: 一个页面上显示了40个模板, 点击某个模板图片会弹出新窗口以供下载。页面底部有翻页按键。

网页源代码: 每对 li 标签内为一个模板的数据, 见下图。

目标信息
1) 模板名称: 在"Response" 选项卡上以第一个模板的名称 “每日工作清单” 作为关键词搜索, 恰好找到一处。然后, 使用它前面的 class=‘title jbxg’ 作为关键词搜索, 发现恰好有40个, 说明可以使用这个标准来获取模板名称。
2) 模板图片的链接: data-original 后面跟的是当前模板图片的网址。

在这里插入图片描述
获取当前页面上的模板名称信息

import requests
from bs4 import BeautifulSoup

url = 'http://www.tuke88.com/soexcel/qingdan/__zonghe_0_1.shtml'
headers= {'User Agent': 'replace with your own header'}

response = requests.get(url, headers)
soup = BeautifulSoup(response.text, 'lxml') # 进行bs4对象初始化,第一个参数是需要解析的源代码,第二个参数是解析器类型
for template_name in soup.find_all(class_='title jbxg'): # 根据分析,目标信息的class是'title jbxg',注意:因为class是Python的关键词,这在里另作他用时必须改一下,后面加个下划线
    print (template_name.string) # 因为获取的数据不止一个,使用find_all找到并用for循环打印出来

运行结果如下
在这里插入图片描述

获取当前页面上的模板图片的链接信息

import re

template_links = re.findall('.*?data-original=\"(.*?)\">',response.text, re.S) # 由于知道精确的模板的链接获取方式,直接使用正则匹配
for template_link in template_links:
    print(template_link)

不是故意使用正则的…本来的计划是完全使用bs4,可是做不到…
在这里插入图片描述
.*?: 通配符,可以表示任意数量的字符
data-original=: 精确匹配目标信息出现之前的字符~
“(.*?)”:

  • (.*?): 通配符,用于适配目标信息
  • 两个\": 因为目标信息(链接)前后各有一个双引号,但由于是Python的特殊字符,不能直接出现在正则表达式中,需要用反斜杠转义。

> 用于匹配目标信息之后出现的字符 “>”
re.S 使通配符可以匹配包括换行符在内的所有字符。必须加,否则一次只能匹配一行的代码。

运行结果如下:在这里插入图片描述

3. 保存信息

保存为txt文件…
除了使用ctrl+F查找信息,我不知道txt文件还可以怎样使用,将就着先存一下,以后再用别的形式。

import requests
from bs4 import BeautifulSoup
import re

# 新建txt文件“template_download”, 解析出模板名称和链接并存储。
soup = BeautifulSoup(response.text, 'lxml') 
with open('templates_download.txt', 'a', encoding ="utf-8") as file: # 记得encoding
    for template_name in soup.find_all(class_='title jbxg'): 
        file.write('\n' + template_name.string) # 分行写入txt文件

    template_links = re.findall('.*?data-original=\"(.*?)\">',response.text, re.S)
    for template_link in template_links:
        file.write('\n' + template_link)
print("template names and lists downloaded")

在这里插入图片描述

4. 爬取,解析并保存余下的网页

点击几次下一页,观察url的变化,两个变化。第一页是 shtml,其余都是html。翻页后网址最后一位数字 +1。一共13页,这里是练习,就爬取前5页吧。
注意sleep,不要影响人家网站~~

http://www.tuke88.com/soexcel/qingdan/__zonghe_0_1.shtml
http://www.tuke88.com/soexcel/qingdan/__zonghe_0_2.html
http://www.tuke88.com/soexcel/qingdan/__zonghe_0_3.html

完整代码

'''
爬虫学习 2021/03/12
爬取工具: requests 入门
解析工具: bs4, re 入门
存储:txt
'''

import requests
from bs4 import BeautifulSoup
import re
from requests.exceptions import RequestException # 导入异常处理工具
import time # 用于设置休眠时间

headers = {'User Agent': 'replace with your own headers'}

def get_one_page(url):
    try: # 加入异常处理
        html = requests.get(url, headers)
        if html.status_code == 200: # 检查状态是否正常,只有"200"代码表示正常状态
            html = html.text
            return html
        return None
    except RequestException:
        return None

def parse_save_one_page(html): # 使用bs4和re解析模板名称及模板图片的链接,同时存储为txt文件
    soup = BeautifulSoup(html, 'lxml') # 进行bs4对象初始化,第一个参数是需要解析的源代码,第二个参数是解析器类型
    with open('templates_download.txt', 'a', encoding ="utf-8") as file: # 注意:encoding
        for template_name in soup.find_all(class_='title jbxg'):  # 模板名称的class是'title jbxg',注意:因为class是Python的关键词,后面需加个下划线
            file.write('\n' + template_name.string)
        template_links = re.findall('.*?data-original=\"(.*?)\">',html, re.S) # 由于知道精确的模板图片链接获取方式,直接使用正则匹配
        for template_link in template_links:
            file.write('\n' + template_link)

def fetch_info():
# 单独处理第一页,因为网址后缀为shtml,和其他页都不一样
    url = 'http://www.tuke88.com/soexcel/qingdan/__zonghe_0_1.shtml'
    parse_save_one_page(get_one_page(url))
# 处理余下的页面
    for i in range(2,6):
        time.sleep(1.1) # 休息1.1秒,哈哈~~~
        url = 'http://www.tuke88.com/soexcel/qingdan/__zonghe_0_'+str(i) +'.html'
        parse_save_one_page(get_one_page(url))

if __name__ == '__main__':
    fetch_info()

导入RequestException:负责异常处理。写程序单页爬取时不用加,要爬取多页时加进来。
运行,得到txt文件里的400行记录,数据格式很不友好,哈哈,以后再改~~

5. 总结

第一次动手写出一个完整的小小爬虫程序,用最简单的requests工具下载网页,用bs4获取目标信息,用re精准获取信息,然后用Python循环完成多页下载,最后保存~~
心情还是有点小激动,🍁🍁~~

为了学习如何配置Anaconda环境,并使用Jupyter Notebook进行Python编程,推荐您参考这篇文档:《Python入门:搭建环境与初识编程》。在这份资料中,作者详细介绍了在Windows 7系统上设置开发环境的步骤,包括安装Anaconda和配置Jupyter Notebook。接下来,我们将根据文档内容以及结合Python爬虫的基础知识,提供一个详细的步骤说明。 参考资源链接:[Python入门:搭建环境与初识编程](https://wenku.youkuaiyun.com/doc/65ncq3z93m) 首先,确保您的Windows 7系统是64位版本,并已安装Google Chrome浏览器。然后,下载并安装Anaconda3,它是一个包含了大量科学计算包的Python发行版。安装完成后,启动Anaconda Navigator,打开Jupyter Notebook。在Jupyter Notebook中,您可以开始编写和运行Python代码。 为了编写一个简单的Python爬虫程序,您需要使用requests库来发送HTTP请求。可以通过pip安装这个库,如果还未安装的话,在Jupyter Notebook中输入以下命令:!pip install requests。之后,创建一个新的笔记本,并输入以下爬虫示例代码: import requests from bs4 import BeautifulSoup # 目标网页URL url = '***' # 发送GET请求 response = requests.get(url) # 检查请求是否成功 if response.status_code == 200: # 使用BeautifulSoup解析网页内容 soup = BeautifulSoup(response.text, 'html.parser') # 打印网页标题 print(soup.title.string) else: print('请求失败') 这段代码首先导入了requests库和BeautifulSoup库,然后向指定的URL发送GET请求,并解析返回的网页内容,最后输出网页的标题。通过这种方式,您可以开始学习如何使用Python进行网络爬虫的基础操作。 当您对Python编程有了基本的了解后,您将能够进一步探索更高级的编程技巧,如数据处理、机器学习和深度学习等。此时,《Python入门:搭建环境与初识编程》中所包含的内容将为您提供坚实的基础,帮助您在Python学习的道路上稳步前行。 参考资源链接:[Python入门:搭建环境与初识编程](https://wenku.youkuaiyun.com/doc/65ncq3z93m)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值