最近想从一个网站上下载资源,懒得一个个的点击下载了,想写一个爬虫把程序全部下载下来,在这里做一个简单的记录

Python的基础语法在这里就不多做叙述了,黑马程序员上有一个基础的视频教学,可以跟着学习一下

本篇博客为基础章:利用Python从网页端抓取数据,闲话不多说,开始正题:

首先需要学习这几个模块:

1 webbrowser:Python自带的模块,打开浏览器获取到指定的页面

2 requests:从英特网上下载文件和网页

3 Beautiful Soup:解析HTML,即网页编写的格式

4 selenium:启动并控制一个Web浏览器。selenium能够填写表单,并模拟鼠标在这个浏览器上点击

1 webbrowser模块:

可以利用.open()方法打开指定的Url。例如在idea中输入如下代码:

运行Python文件,系统会自动打开一个浏览器,打开百度

2  requests模块:

这是一个第三方模块,需要先从网上下载:

我在Python的运行环境下报错:

切换到cmd环境:

安装成功,在项目中加载requests模块:

 import requests
# 调用requests.get()下载文件
res = requests.get('http://www.gutenberg.org/files/57156/57156-h/57156-h.htm')
# 确保程序正在下载失败时候停止
res.raise_for_status()
# Python文件使用“wb”方式打开,写入字符串会报错,因为这种打开方式为:
# 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
playFile = open('test.txt','wb')
# 利用iter_content()方法做循环
# 一段为10000字节
for chuck in res.iter_content(10000):
playFile.write(chuck)
playFile.close()

示例

这里放两个对于这个模块写的比较详细的Blog:

2.1 快速上手

2.2 用法总结

3 Beautiful Soup模块:

用于从html中提取元素信息

首先安装第三方模块:

在项目中加载

首先在项目中添加名为example的html网页,代码如下:

<html><head><title>The Website Title</title></head>
<body>
<p>Download my <strong>Python</strong> book from <a href="http://inventwithpython.com">my website</a>.</p>
<p class="slogan">Learn Python the easy way!</p>
<p>By <span id="author">Al Sweigart</span></p>
</body></html>

example

显示效果如下:

示例代码如下:

 import requests,bs4

 exampleFile = open('example.html')
exampleSoup = bs4.BeautifulSoup(exampleFile.read(),"html.parser")
print('----------通过id----------')
# 返回一个带有id = "author" 的元素,将这个Tag对象的列表保存在变量elems中
elems = exampleSoup.select("#author")
print(type(elems))
# 列表中只有一个Tag对象,只有一次匹配
print(len(elems))
print(type(elems[0]))
# 元素的文本
print(elems[0].getText())
# 一个字符串,包含开始和结束标签,以及该元素的文本
print(str(elems[0]))
# 字典,包含元素的属性以及属性值
print(elems[0].attrs)
print()
print('----------通过元素----------')
pelements = exampleSoup.select('p')
print(len(pelements))
print(str(pelements[0]))
print(pelements[0].getText())
print(str(pelements[1]))
print(pelements[1].getText())
print()
print('----------通过属性----------')
spqnelem = exampleSoup.select('span')[0]
print(len(spqnelem))
print(str(spqnelem))
print(spqnelem.get('id'))
print(spqnelem.attrs)

BeautifulSoup模块

运行结果如图所示:

值得一提的是,一开始在项目运行的时候吗,爆出如下的错误:

解决方法很简单,在调用bs4.BeautifulSoup()函数时添加“html.parser”参数

一些常用的css选择器的模式:

CSS选择器的例子
传递给select()方法的选择器 将匹配为...
 soup.select('div’)  所有名为<div>的元素
  soup.select('#author’)  带有id属性为author的元素
  soup.select('.notice’)  所有使用css class属性为notice的元素
  soup.select('div span’)  所有在<div>元素之内的<span>元素
  soup.select('div>span’)  所有直接在<div>元素之内的<span>元素,中间没有其他元素
  soup.select('input[name]’)  所有名为<input>,并有一个name属性,其值无所谓的元素
  soup.select('input[type = 'button']’)  所有名为<input>,并有一个type属性,其值为button的元素

最后贴一个BeautifulSoup的文档以便参考

4 selenium模块:

该模块可以让Python直接控制浏览器

首先导入模块,方法与之前的略有不同,首先需要下载压缩包,直接运行会报错:

解压后在当前文件夹运行pip install selenium,按住Shift,右键选择在此处打开Powershell窗口

在项目中导入模块,方法较之前几个模块,略有不同,示例代码如下:

 from selenium import webdriver
import time
bo = webdriver.Firefox()
bo.get('https://www.baidu.com/')
# 模拟点击页面按钮
link = bo.find_element_by_partial_link_text('贴吧')
link.click()
# 模拟填写表单并注册
bo.get('https://mail.qq.com/cgi-bin/loginpage')
bo.switch_to.frame('login_frame')
bo.find_element_by_css_selector('#switcher_plogin').click()
emailelem = bo.find_element_by_id('u')
emailelem.send_keys('账号')
passelem = bo.find_element_by_id('p')
passelem.send_keys('密码')
passelem.submit()

selenium

运行时报以下错误:

缺少geckodriver文件,在这里找到对应的版本后,下载之后解压到Python.exe和FireFox所在的文件夹里面即可

爬虫学习笔记(1)-- 利用Python从网页抓取数据的更多相关文章

  1. Python网络爬虫笔记(一):网页抓取方式和LXML示例

    (一)   三种网页抓取方法 1.    正则表达式: 模块使用C语言编写,速度快,但是很脆弱,可能网页更新后就不能用了. 2.    Beautiful Soup 模块使用Python编写,速度慢. ...

  2. Python爬虫【三】利用requests和正则抓取猫眼电影网上排名前100的电影

    #利用requests和正则抓取猫眼电影网上排名前100的电影 import requests from requests.exceptions import RequestException imp ...

  3. 用python做网页抓取与解析入门笔记[zz]

    (from http://chentingpc.me/article/?id=961) 事情的起因是,我做survey的时候搜到了这两本书:Computational Social Network A ...

  4. 利用python scrapy 框架抓取豆瓣小组数据

    因为最近在找房子在豆瓣小组-上海租房上找,发现搜索困难,于是想利用爬虫将数据抓取. 顺便熟悉一下Python. 这边有scrapy 入门教程出处:http://www.cnblogs.com/txw1 ...

  5. ASP.NET网页抓取数据

    我的数据通过一个TextBox输入,这些代码是写在一个button的点击事件里的. 网页数据抓取大概分为两步,第一步是获取网页源代码: 具体注释如下: var currentUrl = TextBox ...

  6. python3下scrapy爬虫(第六卷:利用cookie模拟登陆抓取个人中心页面)

    之前我们爬取的都是那些无需登录就要可以使用的网站但是当我们想爬取自己或他人的个人中心时就需要做登录,一般进入登录页面有两种 ,一个是独立页面登陆,另一个是弹窗,我们先不管验证码登陆的问题 ,现在试一下 ...

  7. Python爬虫学习笔记之爬虫基础库

    知识预览 beautifulsoup的简单使用 beautifulsoup的遍历文档树 beautifulsoup的搜索文档树 beautifulsoup的css选择器 回到顶部 beautifuls ...

  8. 商业爬虫学习笔记day7-------解析方法之bs4

    一.Beautiful Soup 1.简介 Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据.其特点如下(这三个特点正是bs强大的原因,来自官方手册) a. Beau ...

  9. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

随机推荐

  1. 发布到FaceBook试玩广告,FaceBook要求要一个Html文件

    Facebook 试玩广告具体要求: 试玩广告参数是创建试玩广告素材时要满足的要求. 试玩素材应为 HTML5 格式. 试玩广告素材不应使用 mraid.js 格式. 包含所有素材的试玩广告的单个 H ...

  2. [USACO11DEC]牧草种植Grass Planting

    图很丑.明显的树链剖分,需要的操作只有区间修改和区间查询.不过这里是边权,我们怎么把它转成点权呢?对于E(u,v),我们选其深度大的节点,把边权扔给它.因为这是树,所以每个点只有一个父亲,所以每个边权 ...

  3. dom渲染方面的优化浅谈

    今天分享一个面试经验,上周面试中一位印象很深的面试官(主要长得很帅),问我了一个我至今印象很深刻的问题,当然不是什么你之后的职业规划啊,你工作中遇到过哪些问题啊之类的.原起于一道面试题,小伙伴们可以想 ...

  4. #WEB安全基础 : HTTP协议 | 0x11 HTTP的分块传输模块

    HTTP通信中,请求的编码实体资源没全部传输完成之前,浏览器无法显示页面,所以传输大容器数据时,把数据分块,能让浏览器逐步显示页面,这就叫分块传输模块 请看分块传输的流程图 每一块都会用十六进制来标记 ...

  5. redis maxheap 51200000

    Redis无法启动 今天在启动Redis时提示以下错: C:\Java\redis2817>redis-server.exe redis.windows.conf [5268] 23 Apr 1 ...

  6. R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD, R-FCN系列深度学习检测方法梳理

    1. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation 技术路线:selec ...

  7. DotNetty网络通信框架学习

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  8. C# Winform设计运行时,界面模糊

    程序在Visual Studio设计的很清晰的菜单和界面,运行的时候菜单和控件上字体变得很模糊,界面大小也发生了变化 解决方法是:更改程序的配置文件,使程序运行时自动检测屏幕分辨率,在高分屏时禁用系统 ...

  9. mysql 查询前几条数据

    limit是mysql的语法select * from table limit m,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1条开始,取n条.select * from ...

  10. rabbitMQ Management http://localhost:15672/ 打不开

    C:\RabbitMQ Server\rabbitmq_server-3.7.7\sbin>rabbitmq-plugins enable rabbitmq_management 安装rabbi ...