【Pyhton爬虫一】requests与BeautifulSoup

2024-01-29 17:32

本文主要是介绍【Pyhton爬虫一】requests与BeautifulSoup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

requests与BeautifulSoup基础入门

1. 前言

最近在学习python爬虫,以前实现python爬虫,主要是使用较为底层的urllib和urllib2来实现的,这种方法最原始,编码起来也比较困难。而采用requests + BeautifulSoup的实现方案,可以简化代码的书写。如果有不好和错误的地方希望大佬指出。

2. 介绍

  1. 在使用这两个模块之前,需要对这两个模块做一些介绍:requests是基于urllib,采用 Apache2 Licensed 开源协议的 HTTP 库,比 urllib 更加方便。BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,实际上,它将html中的tag作为树节点进行解析。
  2. requests官方文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
  3. BeautifulSoup官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

3. 实现代码

首先是引入这2个库,这里我使用的是PyCharm编辑器,通过Settings→Project: WorkSpace→Project Interpreter寻找bs4和requests库。pip方法引入第三方库请自行百度。
bs4库

requests库

先从最简单的开始,点进糗事百科首页

import requests # 导入requests模块
res = requests.get("http://www.qiushibaike.com") # 获取糗事百科首页
print (res.text) # print(res)打印的是响应码,print(res.text)打印的是首页的源代码

得到页面源码,如果发现页面文字是乱码,则是编码的原因,输出页面的编码

print (res.encoding)

编码

如果不是UTF-8,可以设置为UTF-8

res.encoding = "utf-8"

点进一篇文章,按F12进入开发者工具,按住ctrl+shift+c或者是点击左上角的剪头选中页面中的文章

选择元素

发现其class是content

content

# 获取文章内容
import requests
from bs4 import BeautifulSoup
res = requests.get("https://www.qiushibaike.com/article/119567920")
soup = BeautifulSoup(res.text, "html.parser") # 把我们需要的内容放到BeautifulSoup中,html.parser是一个解析器
div = soup.find_all(class_="content")[0] # 找寻class为content的内容
print(div.text.strip()) # 输出文章内容

内容

如果要获取首页一页的文章内容,则通过开发者工具查看首页,发现每个文章的页面class为article block untagged mb15 typs_xxxx

article block untagged mb15 typs_xxxx

用re来匹配各种文章的class。
Python3正则表达式:http://www.runoob.com/python3/python3-reg-expressions.html

# 获取所有文章的内容
import requests
from bs4 import BeautifulSoup
import reres = requests.get("http://www.qiushibaike.com")
soup = BeautifulSoup(res.text, "html.parser")
divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)')) # 所有文章是一个数组
for div in divs: # 循环取出joke = div.span.get_text()print(joke.strip())print("------")

输出内容后发现有些内容读起来很奇怪,看页面发现有些是有图片的,图片的网页标签(HTML tag)是img。

picture

所以我们要把有图片的文章过滤掉,发现有图片文章有个class为thumb,则我们把有图片的过滤掉

thumb

# 获取一页没有图片的文章
import requests
from bs4 import BeautifulSoup
import reres = requests.get("http://www.qiushibaike.com")
soup = BeautifulSoup(res.text, "html.parser")
divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)')) # 匹配class
for div in divs:if div.find_all(class_="thumb"): # 如果有图片则过滤continuejoke = div.span.get_text()print(joke.strip())print("------")

但是糗事百科有很多页,点击第二页发现网址为:https://www.qiushibaike.com/8hr/page/2/ ,点击第三页发现网址为:https://www.qiushibaike.com/8hr/page/3 ,所以我们只需要将网址最后的数字变动即可得到其他页面

# 获取前几页的文章
import requests
from bs4 import BeautifulSoup
import rebase_url = "https://www.qiushibaike.com/8hr/page/"
for num in range(1, 3): # 设置循环,让num分别等于1-3,获取前3页内容print('第{}页:'.format(num))res = requests.get(base_url + str(num))  # 这里对网址后面加上数字soup = BeautifulSoup(res.text, "html.parser")divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)'))for div in divs:if div.find_all(class_="thumb"):continuejoke = div.span.get_text()print(joke.strip())print("------")print("\n\n\n\n\n\n\n")

这篇关于【Pyhton爬虫一】requests与BeautifulSoup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657654

相关文章

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

Python 爬虫入门 - 基础数据采集

Python网络爬虫是一种强大且灵活的工具,用于从互联网上自动化地获取和处理数据。无论你是数据科学家、市场分析师,还是一个想要深入了解互联网数据的开发者,掌握网络爬虫技术都将为你打开一扇通向丰富数据资源的大门。 在本教程中,我们将从基本概念入手,逐步深入了解如何构建和优化网络爬虫,涵盖从发送请求、解析网页结构到保存数据的全过程,并讨论如何应对常见的反爬虫机制。通过本教程,你将能够构建有效的网络爬

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情

0基础学习爬虫系列:程序打包部署

1.目标 将已经写好的python代码,打包独立部署或运营。 2. 环境准备 1)通义千问 :https://tongyi.aliyun.com/qianwen 2)0基础学习爬虫系列–网页内容爬取:https://blog.csdn.net/qq_36918149/article/details/141998185?spm=1001.2014.3001.5502 3. 步骤 1)不知道