c 开发网站开发,每天三分钟新闻天下事,成武建设局网站,建筑图片一、简单介绍 Python爬虫是使用Python编程语言开发的一种自动化程序#xff0c;用于从互联网上获取信息。通过模拟浏览器的行为#xff0c;爬虫可以访问网页、解析网页内容#xff0c;并提取所需的数据。
python的爬虫大致可以分为通用爬虫和专用爬虫#xff1a; 通用爬虫…一、简单介绍 Python爬虫是使用Python编程语言开发的一种自动化程序用于从互联网上获取信息。通过模拟浏览器的行为爬虫可以访问网页、解析网页内容并提取所需的数据。
python的爬虫大致可以分为通用爬虫和专用爬虫 通用爬虫是一种能够自动化地从互联网上抓取信息的程序它可以根据用户的需求爬取各种类型的网页内容并将其保存或进行进一步处理。通用爬虫通常具有以下特点 灵活性通用爬虫可以爬取各种类型的网页包括新闻、论坛、博客等因此具有较高的灵活性。 自动化通用爬虫可以通过编程实现自动化的抓取过程无需人工干预。 大规模爬取通用爬虫可以处理大量的网页并将其保存到本地或进行进一步的分析和处理。 专用爬虫是一种针对特定网站或特定类型的网页进行定制化开发的爬虫程序它具有以下特点 高度定制化专用爬虫针对特定网站或特定类型的网页进行开发可以根据网站的结构和特点进行优化提高爬取效率和准确性。 速度较快由于专用爬虫只需要处理特定类型的网页因此可以针对性地进行优化提高爬取速度。 数据质量较高专用爬虫可以根据特定网站的要求进行数据抓取和处理因此可以保证数据的准确性和完整性。 1.1 运行原理
爬虫通过模拟服务器发送请求并获取对应的信息 爬虫运行原理取自bing图库 步骤介绍 发送请求爬虫首先向目标网站发送HTTP请求请求获取页面内容。可以使用Python的第三方库如requests发送HTTP请求。 获取页面内容目标网站接收到爬虫的请求后返回相应的页面内容。爬虫通过解析HTTP响应获取页面内容。可以使用Python的第三方库如BeautifulSoup或者正则表达式进行页面内容的解析和提取。 解析页面内容爬虫根据需要的数据类型对页面内容进行进一步的解析和提取。可以使用XPath、CSS Selector或者正则表达式等方式进行页面内容的解析。 存储数据爬虫将解析提取到的数据存储到本地文件或者数据库中。可以使用Python的第三方库如pandas、csv、MySQLdb等进行数据的存储。 遍历链接如果需要爬取多个页面爬虫会根据页面中的链接递归地发送请求和解析页面实现对多个页面的遍历。 反爬虫机制为了防止被网站屏蔽或者限制爬虫需要处理一些反爬虫机制如设置请求头、使用代理IP、降低请求频率等。 二、python爬虫库
按照爬虫爬取网络信息到最终展示数据分析结果的过程我总结了以下常用的python第三方库
2.1 获取网页信息requests库 requests是一个Python的第三方库用于发送HTTP请求。它是基于urllib3库开发的比urllib更加方便和简洁。
使用requests库进行爬虫可以实现以下功能
发送GET和POST请求设置请求头和Cookies设置请求参数和URL编码处理响应结果包括获取状态码、响应头和响应内容等保存下载的文件处理重定向和代理使用会话保持会话状态
常用函数
1.发送请求
requests.get(url, paramsNone, **kwargs)发送GET请求参数url为请求的URLparams为请求中的查询参数requests.post(url, dataNone, jsonNone, **kwargs)发送POST请求参数url为请求的URLdata为请求中的表单数据json为请求中的JSON数据。requests.put(url, dataNone, **kwargs)发送PUT请求参数url为请求的URLdata为请求中的数据。requests.patch(url, dataNone, **kwargs)发送PATCH请求参数url为请求的URLdata为请求中的数据。requests.delete(url, **kwargs)发送DELETE请求参数url为请求的URL。requests.head(url, **kwargs)发送HEAD请求参数url为请求的URL。requests.options(url, **kwargs)发送OPTIONS请求参数url为请求的URL。requests.request(method, url, **kwargs)发送任意类型的HTTP请求参数method为请求的方法url为请求的URL。requests.session()创建一个Session对象用于保持会话状态requests.get(url, paramsNone, **kwargs)发送GET请求参数url为请求的URLparams为请求中的查询参数。
2.获得响应
response requests.get(url, paramsNone, **kwargs)发送GET请求并返回响应对象可以通过该对象获取响应的内容、状态码等信息。response.text获取响应的文本内容。response.content获取响应的二进制内容。response.status_code获取响应的状态码。response.json()将响应的JSON内容解析为Python对象。response.headers获取响应的头部信息。response.cookies获取响应的Cookies信息response.url获取响应的URL。
拓展
可以发送HTTP请求的库不只于requests库还有上面提到的urllib等库。综合来看requests库使用起来最为便捷但是在一些特定的领域使用其他的库可能会有更好的效果
urllib一系列用于操作URL的功能。selenium自动化测试工具。一个调用浏览器的 driver通过这个库你可以直接调用浏览器完成某些操作比如输入验证码。aiohttp基于 asyncio 实现的 HTTP 框架。异步操作借助于 async/await 关键字使用异步库进行数据抓取可以大大提高效率。 2.2 解析网页结构提取数据BeautifulSoup4 BeatifulSoup4是用于解析网页结构的库它的作用是将获取到的网页HTML和XML文档进行分解。从而定位到我们需要获取的特定信息在网页中的位置。 当使用BeautifulSoup4库解析HTML或XML文件时它会根据指定的解析器如html.parser、lxml等将文件转换为文档树的形式。文档树由节点Node组成每个节点代表文件中的一个元素标签、文本等。这些节点之间通过父子关系、兄弟关系等连接在一起形成了树状结构。 html树状图取自bing图库 以下是BeautifulSoup4常用的方法和模块 常用方法和模块 BeautifulSoup这是BeautifulSoup4库的主要类用于解析HTML和XML文件。可以通过指定解析器如html.parser、lxml等来创建一个BeautifulSoup对象并对解析后的内容进行操作。find_all()这是BeautifulSoup对象的一个方法用于查找所有符合指定条件的标签。可以根据标签名、类名、属性等进行查找并返回一个包含所有匹配标签的列表。find() 与find_all()类似但只返回第一个匹配的标签。 select()这是BeautifulSoup对象的另一个方法用于通过CSS选择器语法来查找标签。可以根据标签名、类名、属性等进行查找并返回一个包含所有匹配标签的列表get_text()这是标签对象的方法用于获取标签内的文本内容。attrs这是标签对象的属性用于获取标签的所有属性和属性值。prettify()这是BeautifulSoup对象的方法用于美化解析后的内容使其更易读。
BeautifulSoup4可以结合正则表达式和CSS选择器使用以便更加精确地解析网页结构 拓展
BeautifulSoup4功能比较全面简单易用因此较为常用但在一些特殊的领域使用一些其他的库可以达到更好的效果
pyqueryjQuery 的 Python 实现能够以 jQuery 的语法来操作解析 HTML 文档易用性和解析速度都很好。lxml支持HTML和XML的解析支持XPath解析方式而且解析效率非常高。tesserocr一个 OCR 库在遇到验证码图形验证码为主的时候可直接用 OCR 进行识别。
2.3 数据分析不包含数据可视化
Python数据分析这一块内容丰富常用的库非常多一篇文章写不完。
以下是一些常用的库 NumPyNumPy是一个用于科学计算的基础库提供了维数组对象和一组用于操作数组的函数。 PandasPandas是用于数据处理和分析的强大库提供了高性能的数据结构和数据分析工具如DataFrame和Series。 SciPySciPy是一个用于科学计和技术计算的库提供了许数学、科学和工程计算功能如数值积分、化、线性代数等。 Scikit-learnScikit-learn是一个用于机器学习和数据挖掘的库提供了各种机器学习算法和工具用于分类、回归、聚类等任务。 StatsModelsModels是一个用于统计建模和计量经学的库提供了各种统计模型和统计分析工具。 TensorFlowTensorFlow是一个用于机器学习和深度习的库提供了各种机器学习算法和神经网络模型的实现。 2.4 数据可视化Matplotlib Matplotlib是一个广泛使用的绘图库提供了许多函数和方法用于创建各种类型的图表。 Matplotlib提供了丰富的绘图功能包括线图、散点图、柱状图、饼图、3D图形等。它还支持自定义图形的颜色、样式、标签和图例等属性。Matplotlib还可以在Jupyter Notebook中以交互方式显示图形。 Matplotlib的基本用法包括创建图形对象、添加子图、设置图形属性、绘制数据等。它还提供了一系列的函数和方法来控制坐标轴、刻度、网格、标签、标题等。
常用的绘图模块为pyplot模块使用前应先导入
import matplotlib.pyplot as plt
以下是Matplotlib.pyplot常用的函数
plt.plot(x, y, …)绘制折线图可以指定x轴和y轴的数据。plt.scatter(x, y, …)绘制散点图可以指定x轴和y轴的数据。plt.bar(x, y, …)绘制柱状图可以指定x轴和y轴的数据。plt.hist(x, …)绘制直方图可以指定一维数据数组。plt.pie(x, labels, …)绘制饼图可以指定饼图的数据和标签。plt.boxplot(x, …)绘制箱线图可以指定一维或二维数据数组。plt.imshow(image, …)显示图像可以指定图像的像素数据。plt.contour(x, y, z, …)绘制等高线图可以指定x轴、y轴和z轴的数据。plt.plot_surface(x, y, z, …) 绘制三维曲面图可以指定x轴、y轴和z轴的数据。 plt.xlabel(label)设置x轴标签。plt.ylabel(label)设置y轴标签。plt.title(title)设置图表标题。plt.legend()显示图例。plt.grid()显示网格线。plt.xlim(xmin, xmax)设置x轴的显示范围。plt.ylim(ymin, ymax)设置y轴的显示范围。
除了matplotlib.pyplot模块之外Matplotlib还包括其他一些模块用于不同的功能和任务。以下是一些常用的Matplotlib模块 matplotlib.figure该模块提供了Figure类用于创建和管理图形对象。Figure类是图形的顶级容器可以包含多个子图。 matplotlib.axes该模块提供了Axes类用于绘制图表的坐标轴和图形元素。Axes类是图表的子图用于在图形对象中放置图表元素。 matplotlib.axis该模块提供了Axis类用于管理坐标轴的属性和刻度。Axis类负责绘制坐标轴和刻度线并提供了一些方法用于设置刻度标签和刻度范围。 matplotlib.patches该模块提供了各种形状的Patch类用于绘制图形元素如矩形、圆形、多边形等。这些图形元素可以添加到Axes对象中。 matplotlib.lines该模块提供了Line2D类用于绘制线条和曲线。Line2D类可以用于绘制折线图、曲线图等。 matplotlib.text该模块提供了Text类用于在图表中添加文本标注。Text类可以用于添加标题、标签、注释等文本内容。
了上述模块之外还有其他一些模块用于特定的任务如matplotlib.colors颜色处理、matplotlib.colorbar颜色条处理、matplotlib.ticker刻度处理等。 三、项目实践
介绍
从豆瓣上挖取2022年250个经典电影的名单并绘制成词云图 代码
import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 用于绘制词云图的列表
title_list []#设置请求头避免网页出现418问题
head {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47,referer: https://movie.douban.com/subject/33447633/?fromshowing
}# 逐页爬取
for start_num in range(0, 250, 25):context requests.get(fhttps://movie.douban.com/top250?start{start_num}, headershead).textsoup BeautifulSoup(context, html.parser)# 获取标签span中class为title的对象all_titles soup.findAll(span, attrs{class: title})# 将内容输入绘制词云图使用的列表for title in all_titles:title_string title.stringif / not in title_string:# print(title_string)title_list.append(title_string)# print(title_list)
text .join(title_list)wc WordCloud(C:\Windows\Fonts\Microsoft YaHei UI\msyh.ttc, background_colorwhite, width600,height400, max_words50).generate(text)
plt.imshow(wc, interpolationbilinear)
plt.axis(off)
plt.show()
注上面的print语句为调试节点用于中途检查获取的内容和列表。 运行结果