网络爬虫
网络爬虫是一种自动化程序,用于从互联网上收集数据。它模拟人类浏览器的行为,访问网页并提取所需的信息。网络爬虫通常用于搜索引擎、数据分析、价格比较等领域。
网络爬虫的工作原理是通过发送HTTP请求到目标网站,获取网页的HTML代码。然后,它会解析HTML代码,提取出想要的数据,如标题、内容、链接等。爬虫还可以通过跟踪链接,自动访问其他页面,进一步收集更多的数据。
爬虫可以使用各种编程语言实现,如Python、Java、Ruby等。在选择编程语言时,需要考虑其对网络请求、HTML解析和数据处理的支持程度。
在爬取网页数据时,需要注意遵守网站的爬虫规则。有些网站可能会设置反爬虫机制,如限制访问频率、验证码等。为了避免被封禁或触发反爬虫机制,可以设置合理的请求间隔,并使用代理IP来隐藏真实IP地址。
网络爬虫的应用非常广泛。在搜索引擎中,爬虫通过不断抓取网页内容,建立搜索引擎索引,使用户能够快速找到所需信息。在数据分析中,爬虫可以用于收集和清洗数据,为后续分析提供支持。在价格比较网站中,爬虫可以收集不同电商网站的价格信息,帮助用户选择最优惠的商品。
然而,网络爬虫也面临一些挑战和道德问题。一些网站不希望被爬虫访问,因为它们担心数据被滥用或侵犯隐私。因此,爬虫需要遵守网站的robots.txt文件,避免访问禁止的页面。此外,爬虫还应该遵守相关法律法规,如个人信息保护法等。
总而言之,网络爬虫是一种强大的工具,可以帮助我们快速获取互联网上的数据。但是,我们在使用爬虫时需要遵守相关规定,保护个人隐私和维护网络生态的健康发展。
爬取静态网页数据
urllib库
urllib库是python内置的HTTP请求库,它可以看做是处理URL的组件集合。
| 模块名称 | 描述 |
|---|---|
| urllib.request | 请求模块 |
| urllib.error | 异常处理模块 |
| urllib.parse | url解析模块 |
| urllib.robotparser | robots.txt解析模块 |
使用urllib快速爬取网页数据
import urllib.request
# 调用urllib.request库的urlopen方法,并传入一个url
response = urllib.request.urlopen('http://www.baidu.com')
# 使用read方法读取获取到的网页内容
html = response.read().decode('UTF-8')
# 打印网页内容
print(html)
在上面的代码中,有一句比较核心的代码
response = urllib.resquest.urlopen('http://www.baidu.com')
上述代码调用了urllib.resquest模块中的urlopen方法,导入了百度首页的url,使用的协议是http。这是urlopen的一种简单用法.
使用urlopen方法发送HTTP请求后,服务器返回的响应内容封存在一个HTTPResponse类型的对象中。
import urllib.request
response = urllib.request.urlopen('http://www.itcast.cn')
print(type(response))
HTTPResponse类属于http.client模块,该类提供了获取URL。状态码、相应内容等一系列方法.
| url | 表明目标资源在网站中的位置 |
|---|---|
| geturl() | 用于获取响应内容的url,该方法可以验证发送的HTTP请求是否被重新调配 |
| info() | 返回页面的元信息 |
| getcode() | 返回HTTP请求的响应状态码 |
示例
import urllib.requset
response = urllib.request.urlopen('http://pthon.org')
# 获取响应信息对应的url
print(response.geturl())
# 获取响应码
print(response.getcode())
# 获取页面的元信息
print(response.info())
在构建请求时,除了必须设置的url参数外,还可以加入很多内容,例如下面的参数
| data | 默认为空,表示提交单数据,同事HTTP请求方法将从默认的GET方式改为POST方式 |
|---|---|
| headers | 默认为空,该参数是一个字典类型 |
在使用urllib库发送URL的时候,建议使用构建Request对象的方式
1.将url作为Request方法的参数,构建并返回一个Request对象
2.将Request对象作为urlopen方法的参数,发送给服务器并接收响应。
编码转移
当传递的URL中包含中文或者其他特殊字符(比如空格时),需要用到urllib.parse库中的urlencode方法将URl进行编码。
它可以将“key:value”这样的键值对转换成“key=value”这样的字符串。
解码使用的是url.parse库的unquote方法。
代理服务器
urlopen不支持代理、Cookie等其他的HTTP/HTTPS高级功能,所以如果想要设置代理,不能使用自带的urlopen,而是要自定义opener。
三步骤
1.使用相关的Header处理器创建特定功能的处理器对象.
2.通过urllib.request.build_opener()方法使用这些处理器对象创建自定义的opener对象。
3。使用自定义的opener对象,调用open方法发送请求。
爬取动态网页数据
python中提供了许多模拟浏览器运行的库,包括Selenium、Splash、pyAutoGUI等。
Selenium
Selenium是一个开源的、便携式的自动化测试工具、它最初是为网站自动化测试而开发的,Selenium支持与主流浏览器的配合使用。Selnium可以直接运行在浏览器中,模拟用户使用浏览器完成一些动作,自动加载页面、输入文本。选择下拉框、单击按钮、单击超链接等。不过,Selenium本身不带浏览器,它需要通过一个浏览器驱动程序WebDriver才能与所选浏览器进行交互。
下载Selenium
pip install selenium
每个浏览器都有一个特定的WebDriver。WebDriver称为驱动程序实现Selenium与浏览器之间的交互。
| 浏览器 | 驱动系统 |
|---|---|
| Chromium/Chrome | chromeDriver |
| Firefox | geckodriver |
| Edge | MicrosoftWebDriver |
| IE | IEDriverServer |
| Opera | operachromiumdriver |
| Safari | safaridriver |
驱动系统下载地址
Chrome驱动程序
Firefox驱动程序
Safari驱动程序
记得去把WebDriver配置到系统环境变量
WebDriver类的常用属性
| 属性 | 说明 |
|---|---|
| title | 获取当前页面的标题 |
| current_url | 获取当前页面的URl地址 |
WebDriver类的常用方法
| 方法 | 说明 |
|---|---|
| get() | 根据指定URL地址访问页面 |
| maximize_window() | 设置浏览器窗口最大化 |
| forward() | 页面前进 |
| back() | 页面后退 |
| refresh() | 刷新当前页面 |
| save_screenshot() | 对当前浏览器窗口进行截图 |
| quit() | 会话结束时退出浏览器 |
| close() | 关闭当前窗口 |
1.访问网站
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
2.前进、后退、刷新
driver.forward()
driver.back()
driver.refresh()
3、获取
print(driver.title)#获取标题
print(driver.current_url)#获取当前页的url
4.定位查找元素的方法
Selenium的WebDriver类中提供了很多定位元素的方法,有通过指定方式定位元素、通过id属性定位元素、通过name属性定位元素、通过链接文本定位元素等方法,以下是通过id属性定位元素的方法:
driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
#通过id属性定位元素
element = driver.find_element_by_id('header-wrapper')
#访问text属性输出元素的文本内容
print(element.text)
还有各种方法,放到之后再讲了各位。
本文介绍了网络爬虫的基本概念,工作原理,如何使用Python的urllib库进行网页数据抓取,以及在实际应用中遇到的挑战和道德问题。同时提到了Selenium在模拟动态网页中的作用。
21万+

被折叠的 条评论
为什么被折叠?



