目录
安装requests库:在命令提示符cmd里面进行requests库的下载
网络爬虫的概述
概念:
- 网络爬虫又称网页蜘蛛、网络机器人,是一种按照一定的规则、自动请求万维网网站并提取网络数据的程序或脚本。
- 如果说网络像一张网,那么爬就是网上的一只小电子,在网上爬行的过程中遇到了数据,就把它爬取下来。
网络爬虫的常用功能:如图所示。
爬取数据目的:
获取大量数据,用来做数据分析
公司项目的测试数据,公司业务所需数据
Python做爬虫优势
- Python :请求模块、解析模块丰富成熟,强大的Scrapy网络爬虫框架
- PHP :对多线程、异步支持不太好
- JAVA:代码笨重,代码量大
- C/C++:虽然效率高,但是代码成型慢
爬虫爬取数据步骤
- 确定需要爬取的URL地址
- 由请求模块向URL地址发出请求,并得到网站的响应
- 从响应内容中提取所需数据
- 所需数据保存
- 页面中有其他需要继续跟进的URL地址,继续第2步去发请求,如此循环
拓展:XML、JSON的在线工具https://www.sojson.com/
爬虫请求模块
模块名及导入urllib.request
urllib 库是 Python 内置的 HTTP 请求库,它可以看做是处理URL的组件集合。
- 模块名:urllib.request
- 导入方式:
import urllib.request
from urllib import request
- 使用方法:
req = request.Request(url,headers=headers)
res = request.urlopen(req)
html = res.read().decode('utf-8')
解析网络数据
- Python 中提供了多种解析网页数据的技术,包括正则表达式、XPath 、BeautifulSoup 、JSONPath 。
- 正则表达式是一种文本模式,这种模式描述了匹配字符串的规则,用于检索字符串中是否有符合该模式的子串,或者对匹配到的子串进行替换。正则表达式的优点是功能强大,应用广泛,缺点是只适合匹配文本的字面意义而不适合匹配文本意义。
- XPath是XML路径语言,用于从HTML或XML格式的数据中提取所需的数据XPath适合处理层次结构比较明显的数据,它能够基于HTML或XML的节点树确定目标节点所在的路径,顺着这个路径便可以找到节点对应的文本或属性值。
- Beautiful Soup 是一个可以从HTML或XML文件中提取数据的 Python 库它同样可以使用XPath语法提取数据,并且也在此基础上做了方便开发者的封装,提供了更多选取节点的方式。
- JSONPath的作用类似XPath,它也是以表达式的方式解析数据的,但只能解析JSON格式的数据。
re模块的使用
Selenium的安装方式非常简单,可以直接使用 pip 命令安装,具体的安装命令如下:
pip install selenium==3.141.0
requests库爬取静态网页
-
安装
requests
库:在命令提示符cmd里面进行requests库的下载pip install requests
-
导入
requests
库:import requests
-
发送HTTP请求并获取响应:
url = 'https://example.com' # 替换为你要爬取的网页URL response = requests.get(url)
-
检查响应状态码:
if response.status_code == 200: print('请求成功') else: print('请求失败')
-
获取网页内容:
html_content = response.text print(html_content)
-
实例爬取豆瓣电影
import requests from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options def get_html(url): # 使用Selenium模拟浏览器行为 chrome_options = Options() chrome_options.add_argument('--headless') # 无头浏览器模式,避免真实显示浏览器窗口 driver = webdriver.Chrome(options=chrome_options) driver.get(url) return driver.page_source def parse_html(html): # 使用BeautifulSoup解析HTML内容 soup = BeautifulSoup(html, 'lxml') # 这里可以使用BeautifulSoup的方法来提取你需要的数据 # 例如,提取所有的电影名称 movie_names = soup.select('.title') # 处理电影名称的文本内容 for name in movie_names: print(name.text) url = 'https://movie.douban.com/' html = get_html(url) parse_html(html)
请注意以下几点:
- 在使用Selenium模拟浏览器行为时,需要安装Chrome驱动(即chromedriver),并将其路径添加到系统环境变量中,或者在代码中指定其路径。
- 在使用BeautifulSoup解析HTML内容时,可以根据需要选择不同的解析器(如'lxml'、'html.parser'等)。同时,可以根据目标网页的结构选择合适的CSS选择器或XPath来提取所需的数据。
- 在爬取网页时,需要遵守网站的robots.txt文件和使用条款,避免频繁访问或恶意攻击。此外,要尊重网站的隐私政策和反爬虫机制,不要使用过于激进的方法进行爬取。
结尾总结:
经过这一次爬虫的学习,可以说是对老师之前所讲的知识的一个巩固,无论是列表,字典,又或者是字符串的操作,又或者是文件操作,以及爬虫相关的知识全都用上了。同时,这一次也让自己学会了很多东西,比如是自己在做的时候有遇到许多问题,比如是自己因为没有加入时间间隔去访问,会经常503访问异常,同时加入了时间间隔,有时也会出现,就需要我们递归重新调用该函数重新爬取数据。又或者是对文本的处理,对他们保存的格式,让他们看起来更加的方便,以及CSV格式的保存。这一次的爬虫课程设计,不仅仅是一次作业,更是对自己这一个学期以来学习的回顾,也是提高自己python编程能力,以及自己思考问题的方式。