从网页抓取数据(记录Python基础语法(一):利用Python从网页端抓取数据 )
优采云 发布时间: 2022-04-06 12:15从网页抓取数据(记录Python基础语法(一):利用Python从网页端抓取数据
)
最近想从一个网站下载资源,懒得点一个一个下载,想写个爬虫把所有的程序都下载下来,这里做个简单的记录
Python的基本语法在此不赘述。有黑马程序员基础视频教学,可以关注学习。
本篇博客是基础篇:使用Python从网页爬取数据,废话不多说,开始正题:
首先你需要学习这些模块:
1 webbrowser:Python自带模块,打开浏览器获取指定页面
2 个请求:从 Internet 下载文件和网页
3 Beautiful Soup:解析 HTML,网页编写的格式
4 selenium:启动和控制网络浏览器。selenium 能够填写表格并在此浏览器上模拟鼠标点击
1网络浏览器模块:
您可以使用 .open() 方法打开指定的 Url。例如在idea中输入如下代码:
运行Python文件,系统会自动打开浏览器,打开百度
2请求模块:
这是一个第三方模块,需要先从网上下载:
在 Python 运行时环境中出现错误:
切换到cmd环境:
安装成功,加载项目中的requests模块:
1 import requests
2 # 调用requests.get()下载文件
3 res = requests.get('http://www.gutenberg.org/files/57156/57156-h/57156-h.htm')
4 # 确保程序正在下载失败时候停止
5 res.raise_for_status()
6 # Python文件使用“wb”方式打开,写入字符串会报错,因为这种打开方式为:
7 # 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
8 playFile = open('test.txt','wb')
9 # 利用iter_content()方法做循环
10 # 一段为10000字节
11 for chuck in res.iter_content(10000):
12 playFile.write(chuck)
13 playFile.close()
例子
这里有两篇关于这个模块的更详细的博客:
2.1 快速入门
2.2 使用总结
3美汤模块:
用于从html中提取元素信息
首先安装第三方模块:
在项目中加载
首先在项目中添加一个名为example的html页面,代码如下:
The Website Title
Download my Python book from my website.
Learn Python the easy way!
By Al Sweigart
例子
显示效果如下:
示例代码如下:
1 import requests,bs4
2
3 exampleFile = open('example.html')
4 exampleSoup = bs4.BeautifulSoup(exampleFile.read(),"html.parser")
5 print('----------通过id----------')
6 # 返回一个带有id = "author" 的元素,将这个Tag对象的列表保存在变量elems中
7 elems = exampleSoup.select("#author")
8 print(type(elems))
9 # 列表中只有一个Tag对象,只有一次匹配
10 print(len(elems))
11 print(type(elems[0]))
12 # 元素的文本
13 print(elems[0].getText())
14 # 一个字符串,包含开始和结束标签,以及该元素的文本
15 print(str(elems[0]))
16 # 字典,包含元素的属性以及属性值
17 print(elems[0].attrs)
18 print()
19 print('----------通过元素----------')
20 pelements = exampleSoup.select('p')
21 print(len(pelements))
22 print(str(pelements[0]))
23 print(pelements[0].getText())
24 print(str(pelements[1]))
25 print(pelements[1].getText())
26 print()
27 print('----------通过属性----------')
28 spqnelem = exampleSoup.select('span')[0]
29 print(len(spqnelem))
30 print(str(spqnelem))
31 print(spqnelem.get('id'))
32 print(spqnelem.attrs)
BeautifulSoup 模块
运行结果如图:
值得一提的是,项目刚开始运行时,出现如下错误:
解决方法很简单,在调用bs4.BeautifulSoup()函数的时候加上“html.parser”参数
一些常见的 CSS 选择器模式:
CSS 选择器示例
传递给 select() 方法的选择器
将匹配为...
汤.select('div')
全部命名
元素
汤.select('#author')
具有 id 属性作者的元素
汤.select('.notice')
所有带有通知的 css 类属性的元素
汤.select('div跨度')
全部在
元素中的元素
汤.select('div>span')
都直接在
一个元素中的一个元素,中间没有其他元素
汤.select('输入[名称]')
所有命名的元素都有一个 name 属性,其值无关紧要
soup.select('input[type = 'button']')
所有命名的元素都有一个 type 属性,其值为 button
最后贴一个 BeautifulSoup 的文档供参考
4个硒模块:
该模块允许 Python 直接控制浏览器
首先导入模块。该方法与前一种方法略有不同。首先,您需要下载压缩包。如果直接运行会报错:
解压后在当前文件夹运行pip install selenium,按住Shift,右键选择Open Powershell window here
在项目中导入模块。该方法与之前的模块略有不同。示例代码如下:
1 from selenium import webdriver
2 import time
3 bo = webdriver.Firefox()
4 bo.get('https://www.baidu.com/')
5 # 模拟点击页面按钮
6 link = bo.find_element_by_partial_link_text('贴吧')
7 link.click()
8 # 模拟填写表单并注册
9 bo.get('https://mail.qq.com/cgi-bin/loginpage')
10 bo.switch_to.frame('login_frame')
11 bo.find_element_by_css_selector('#switcher_plogin').click()
12 emailelem = bo.find_element_by_id('u')
13 emailelem.send_keys('账号')
14 passelem = bo.find_element_by_id('p')
15 passelem.send_keys('密码')
16 passelem.submit()
硒
运行时出现以下错误:
geckodriver 文件丢失。在这里找到对应的版本后,下载并解压到Python.exe和FireFox所在的文件夹。