爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。 从技术层面来说就是 通过程序模拟浏览器请求站点的行为, 把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地, 进而提取自己需要的数据,存放起来使用。
爬虫基本流程
用户获取网络数据的方式:
- 方式1:浏览器提交请求--->下载网页代码--->解析成页面
- 方式2:模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中,爬虫要做的就是方式2。
- 发起请求:
- 使用http库向目标站点发起请求,即发送一个Request
- Request包含:请求头、请求体等
- Request模块缺陷:不能执行JS 和CSS 代码
- 获取响应内容
- 如果服务器能正常响应,则会得到一个Response
- Response包含:html,json,图片,视频等
- 解析内容
- 解析html数据:正则表达式(RE模块)、xpath(主要使用)、beautiful soup、css
- 解析json数据:json模块
- 解析二进制数据:以wb的方式写入文件
- 保存数据
- 数据库(MySQL,Mongdb、Redis)或 文件的形式。
方法实例
爬取https://www.python.org/jobs/ 相关信息。
import requests
from bs4 import BeautifulSoup
- 定义目标URL:
替换为你想爬取的网站
url = "https://www.osgeo.cn/"
- 发送HTTP请求:
try:
response = requests.get(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})
response.raise_for_status() # 检查请求是否成功
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
exit()
- 解析HTML内容:
soup = BeautifulSoup(response.text, 'html.parser')
- 提取数据示例 - 获取页面标题:
page_title = soup.title.string
print(f"页面标题: {page_title}")
页面标题: 开源地理空间基金会中文分会,OSGeo中文分会,OSGeo中国中心,地理空间数据共享,开放地理空间实验室
- 提取所有链接:
print("\n页面中的链接:")
for link in soup.find_all('a', href=True):
href = link['href']
text = link.get_text(strip=True)
if href.startswith('http'): # 只显示完整URL
print(f"{text}: {href}")
页面中的链接: WebGIS在线教程: http://webgis.cn/ GISLite: WebGIS静态发布系统: http://gislite.osgeo.cn/ 公众号: https://www.osgeo.cn/page/announcement EN: https://ikcest-drr.osgeo.cn/ : https://www.osgeo.cn/ Python与开源GIS: http://www.osgeo.cn/pygis/ 浏览: http://www.osgeo.cn/pygis/ 开源WebGIS教程: http://webgis.cn/ 浏览: http://webgis.cn/ WebGIS在线演示: https://www.mapfig.cn 打开App方式WebGIS演示: http://quagis.osgeo.cn 打开传统方式WebGIS演示: https://www.mapfig.cn 中国历史地图: https://history-map.osgeo.cn/ 浏览: https://history-map.osgeo.cn/ 历史与地理知识: https://geohist.osgeo.cn/ 浏览: https://geohist.osgeo.cn/ WebGIS教程源码发布: https://github.com/gislite/webgis-pub : https://github.com/gislite/webgis-pub GeoServer在线中文教程: https://www.osgeo.cn/geoserver-tutorial/ WDC-D 数据中心档案: https://www.osgeo.cn/site_wdc/ GRASS GIS中文教程: https://www.osgeo.cn/grass_tutorial/ 地理信息文档整编: https://www.osgeo.cn/gis-booklet/ OpenCV Python教程: https://www.osgeo.cn/opencv-python/ 文档管理工具简明手册: https://www.osgeo.cn/sphinx-note/ 遥感教程: https://www.osgeo.cn/remotesensing/ 地理信息系统基础原理1.0: https://www.osgeo.cn/gis-tutorial/ QGIS 3 入门与实践0.2: https://www.osgeo.cn/qgis-tutorial/ pyogrio -使用GDAL/OGR的载体化空间载体文件格式I/O早期版本: https://www.osgeo.cn/pyogrio/ GeoMesa文档4.1.1-SNAPSHOT: https://www.osgeo.cn/geomesa/ Orfeo工具箱8.0 Alpha2: https://www.osgeo.cn/otb/ GeoPandas中文文档0.10.2.dev+79: https://www.osgeo.cn/geopandas/ GeoNetwork 开源文档3.12.1: https://www.osgeo.cn/geonetwork/ geoplot 地理空间数据可视化工具0.4.1: https://www.osgeo.cn/geoplot/ pygeoapi 文档0.13.dev0: https://www.osgeo.cn/pygeoapi/ Geonode 文档3.2.0: https://www.osgeo.cn/geonode/ Pycsw 中文文档(翻译)2.3-dev: https://www.osgeo.cn/doc_pycsw/ OGC 学习教程2.0.0: https://www.osgeo.cn/ogc-e-learning/ OpenGIS中文文档1.0: https://www.osgeo.cn/doc_opengis/ GeoAlchemy 2: https://www.osgeo.cn/geoalchemy2/ OSGEarth 三维地球SDK3.1: https://www.osgeo.cn/osgearth/ RasterIO 访问栅格数据1.0.24: https://www.osgeo.cn/rasterio/ MapProxy 地图切片程序1.13.0: https://www.osgeo.cn/mapproxy/ Pyproj 地图投影类库2.1.1: https://www.osgeo.cn/pyproj/ RTree 空间索引库0.9.7: https://www.osgeo.cn/rtree/ GeoPy 地址匹配工具2.0.0: https://www.osgeo.cn/geopy/ ZOO-Project中文文档1.8: https://www.osgeo.cn/zoo-project/ QGIS 中文网站3.16.2: https://www.osgeo.cn/qgis/site/ QGIS 文档3.16.2: https://www.osgeo.cn/qgisdoc/docs/ OSGeoLive New14.0: https://www.osgeo.cn/osgeo-live/ MappyFile 中文文档0.9.0: https://www.osgeo.cn/mappyfile/ Fiona 轻量矢量读写类库中文文档2.0.dev: https://www.osgeo.cn/fiona/ Folium 轻量WebGIS中文文档: https://www.osgeo.cn/folium/ PySAL 空间分析库中文文档2.1.0rc: https://www.osgeo.cn/pysal/ Shapely 空间分析类库中文文档1.7a2: https://www.osgeo.cn/shapely/ GeoServer用户手册2.19.x: https://www.osgeo.cn/geoserver-user-manual/ MapServer 官网中文版7.6.4: https://www.osgeo.cn/mapserver/ PROJ:地图投影库9.0.0: https://www.osgeo.cn/proj/ GDAL:地理数据处理软件包3.2.0: https://www.osgeo.cn/gdal/ TomoPY: https://www.osgeo.cn/tomopy/ Aafigure文档0.5: https://www.osgeo.cn/aafigure/ Pymunk6.6.0: https://www.osgeo.cn/pymunk/ OAuthLib的文档3.2: https://www.osgeo.cn/oauthlib/ Django OAuth工具包文档2.3.0: https://www.osgeo.cn/django-oauth-toolkit/ APSW 文档4.3.0: https://www.osgeo.cn/apsw/ Kombu文档5.3.2: https://www.osgeo.cn/kombu/ Mahotas:用Python语言实现计算机视觉1.4.13: https://www.osgeo.cn/mahotas/ Rich文档13.5.2: https://www.osgeo.cn/rich/ pyglet文档v2.0.9: https://www.osgeo.cn/pyglet/ Boltons:Python实用工具集21.0.0: https://www.osgeo.cn/boltons/ PostGIS地理空间数据库中文手册3.3.0dev: https://www.osgeo.cn/postgis-manual/ Podman容器工具中文文档4.0: https://www.osgeo.cn/podman/ Pandas中文文档1.5.0.dev0+697.gf9762d8f52: https://www.osgeo.cn/pandas/ Python游戏库Arcade中文文档2.6.13: https://www.osgeo.cn/arcade/ Pygame中文文档2.1.3: https://www.osgeo.cn/pygame/ scikit-image中文文档0.19.0.dev0: https://www.osgeo.cn/scikit-image/ DearPyGui:Python GUI 工具箱1.5.1: https://www.osgeo.cn/dearpygui/ Docker模块5.1.0-dev: https://www.osgeo.cn/docker-py/ Biopython:生物信息学的Python模块1.79: https://www.osgeo.cn/biopython/ SciPy文档1.8.0.dev0: https://www.osgeo.cn/scipy/ Babel 文档2.9.0: https://www.osgeo.cn/babel/ Coala 代码分析器0.10-极地: https://www.osgeo.cn/coala/ GDA开发人员指南: https://www.osgeo.cn/gda-dev/ GDA用户指南: https://www.osgeo.cn/gda-user/ Tox:通用的虚拟环境管理和测试命令行工具3.25.0: https://www.osgeo.cn/tox/ Alabaster:Sphinx主题: https://www.osgeo.cn/alabaster/ PyOpenCL,访问 OpenCL 的Python类库2020.3.1: https://www.osgeo.cn/pyopencl/ Python静态代码扫描工具——flake83.8.4: https://www.osgeo.cn/flake8/ scikit-bio 文档0.5.6: https://www.osgeo.cn/scikit-bio/ Astropy:天文学和天体物理学Python工具包4.3.1: https://www.osgeo.cn/astropy/ JMESPath:JSON查询语言: https://www.osgeo.cn/jmespath/ Spyder 文档5: https://www.osgeo.cn/spyder-docs/ Dateutil 文档2.8.2: https://www.osgeo.cn/dateutil/ PyMongo 文档3.11.1.dev1: https://www.osgeo.cn/mongo-python-driver/ Felix 教程2016.07: https://www.osgeo.cn/felix/ yagmail 文档0.10.189: https://www.osgeo.cn/yagmail/ Python-docx 文档0.8.11: https://www.osgeo.cn/python-docx/ Pelican 中文文档4.7.1: https://www.osgeo.cn/pelican/ URLLIb3 中文文档1.26.9: https://www.osgeo.cn/urllib3/ TabLIB 文档3.2.1: https://www.osgeo.cn/tablib/ Pycuda 中文文档2020.1: https://www.osgeo.cn/pycuda/ Invoke 中文文档: https://www.osgeo.cn/invoke/ PyWPS 中文文档4.2.4: https://www.osgeo.cn/pywps/ Nose2 中文文档0.10.0: https://www.osgeo.cn/nose2/ Web2py的API文档2.22.3: https://www.osgeo.cn/web2py/ web.py 中文文档0.39: https://www.osgeo.cn/webpy/ Python到readthedocs指南0.1.0: https://www.osgeo.cn/python2readthedocs/ Build the docs:技术文档生成器0.1: https://www.osgeo.cn/build-the-docs/ Gevent 事件循环21.8.0: https://www.osgeo.cn/gevent/ Deeptools:用于探索深度排序数据的工具3.3.0: https://www.osgeo.cn/deeptools/ GitPython 文档3.1.14: https://www.osgeo.cn/gitpython/ Pygraphviz 文档1.7: https://www.osgeo.cn/pygraphviz/ Pycairo 模块: https://www.osgeo.cn/pycairo/ Python打包用户指南: https://www.osgeo.cn/python-packaging/ Suricata:高性能网络ID、IP和网络安全监控引擎7.0.0-dev: https://www.osgeo.cn/suricata/ 力学与流体动力学研究所 Python 101 入门0.1: https://www.osgeo.cn/mimm-python101/ 科学中的 Python: https://www.osgeo.cn/scientific-python/ Python 漫游指南: https://www.osgeo.cn/python-guide/ Python 101入门0.1: https://www.osgeo.cn/python101/ Mechanize操控浏览器0.4.7: https://www.osgeo.cn/mechanize/ Falcon Web框架3.1.0dev1: https://www.osgeo.cn/falcon/ Sanic 异步框架21.3.0a1: https://www.osgeo.cn/sanic/ Bokeh:一个交互式可视化Python库2.2.2: https://www.osgeo.cn/bokeh/ Seaborn绘图工具库0.12.0.dev0: https://www.osgeo.cn/seaborn/ Click 模块8: https://www.osgeo.cn/click/ Apache Spark:集群计算系统: https://www.osgeo.cn/learnspark/ Jinja2:基于python的模板引擎3.0.0: https://www.osgeo.cn/jinja/ Pytest:帮助您编写更好的程序: https://www.osgeo.cn/pytest/ Jupyter Notebook7.0.0a3: https://www.osgeo.cn/jupyter/ Fabric 中文文档1.x: https://www.osgeo.cn/fabric/ Scapy 交互式数据包处理程序2.4.4.dev265: https://www.osgeo.cn/scapy/ NLTK 自然语言工具包3.6.2: https://www.osgeo.cn/nltk/ Beautiful Soup4 Web解析库4.7.1: https://www.osgeo.cn/beautifulsoup/ PyCurl 网络工具文档中文版7.45.1: https://www.osgeo.cn/pycurl/ NetworkX 网络分析文档中文版2.8: https://www.osgeo.cn/networkx/ OpenPyXL 文档中文版3.0.5: https://www.osgeo.cn/openpyxl/ Werkzeug WSGI应用程序库2.1.X: https://www.osgeo.cn/werkzeug/ CubicWeb 语义Web应用程序框架3.28.0.dev0: https://www.osgeo.cn/cubicweb/ Cherrypy 极简的python web框架18.6.1.dev: https://www.osgeo.cn/cherrypy/ Eve, Python REST API框架1.1.6.dev0: https://www.osgeo.cn/eve/ Bottle Python Web框架0.13: https://www.osgeo.cn/bottle/ SQLAlchemy 中文版1.4.25: https://www.osgeo.cn/sqlalchemy/ Pyramid Cookbook 中文版0.2: https://www.osgeo.cn/pyramid_cookbook/ Pyramid 文档中文版2.0: https://www.osgeo.cn/pyramid/ Tornado 文档中文版6.2.dev1: https://www.osgeo.cn/tornado/ Django 文档中文版5.0.dev: https://www.osgeo.cn/django/ Pygments 语法高亮2.7.3: https://www.osgeo.cn/pygments/ Whoosh 全文检索2.7.4: https://www.osgeo.cn/whoosh/ PyCodeStyle 工具2.6: https://www.osgeo.cn/pycodestyle/ PyQuery 网页解析库1.1: https://www.osgeo.cn/pyquery/ Flask Web 开发微框架1.1.X: https://www.osgeo.cn/flask/ Scrapy 应用程序框架2.5: https://www.osgeo.cn/scrapy/ Requests HTTP for Humans2.25.1: https://www.osgeo.cn/requests/ Pillow 图像处理8.4.0: https://www.osgeo.cn/pillow/ Peewee 轻量数据库ORM3.15.3: https://www.osgeo.cn/peewee/ Sphinx 文档构建工具3.5.0+: https://www.osgeo.cn/sphinx/ Matplotlib 科学绘图库中文文档3.3.3: https://www.osgeo.cn/matplotlib/ NumPy 数值计算库中文文档1.21.0.dev0+343.g098a3b417: https://www.osgeo.cn/numpy/ Python 3.8中文文档(C语言实现版本)3.10.0a4: https://www.osgeo.cn/cpython/ PostgREST: https://www.osgeo.cn/postgrest/ Fedora CoreOS中文文档36.20220918.3.0: https://www.osgeo.cn/coreos/fedora-coreos/ Quasar 2中文网站2.6.6: http://quasar.osgeo.cn/ Linux ABRT程序Bug报告工具2.14: https://www.osgeo.cn/abrt/ Ansible Molecule项目3.5.2: https://www.osgeo.cn/molecule/ Twig:PHP模板语言3.x: https://www.osgeo.cn/twig/ Sage Math 中文文档9.1: https://www.osgeo.cn/sagemath/ Apache CouchDB 文档3.1: https://www.osgeo.cn/couchdb-documentation/ MathJax 中文文档3.2: https://www.osgeo.cn/mathjax/ Godot 引擎: https://www.osgeo.cn/godot/ Solidity:用于以太坊应用的智能合约语言0.8.10: https://www.osgeo.cn/solidity/ Python与开源GIS: https://www.osgeo.cn/pygis/ 开源WebGIS: http://webgis.cn/ 防灾减灾知识服务: https://ikcest-drr.osgeo.cn/ ICSU-WDS China Center: http://www.wds-china.org/ 可再生资源与环境世界数据中心: http://wdcrre.data.ac.cn/ 东北亚资源环境大数据中心: http://www.igadc.cn/ 中蒙俄协同创新平台: http://ydyl.gislab.cn/ 中巴经济走廊资源、环境、生态、灾害信息系统与共享平台: http://www.cpjrc.net/ 吉林省地理学会: https://gsjl.igadc.cn 黑土粮仓科技会战指挥控制平台: http://heitu.igadc.cn/#/ Digital China Pakistan Economic Corridor: http://cpjrc-quasar.gislab.cn/#/ : http://www.wds-china.org/ : https://www.gislite.com/ : http://webgis.cn/ : https://ikcest-drr.osgeo.cn/ 吉ICP备05002032号: https://beian.miit.gov.cn