从网页抓取数据(记录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所在的文件夹。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线