网页css js 抓取助手(Python爬虫的详细用法,你都知道吗?(一))
优采云 发布时间: 2022-02-02 23:19网页css js 抓取助手(Python爬虫的详细用法,你都知道吗?(一))
为了正常显示中文,指定编码为UTF-8
5)链接标签
点击我,本窗口访问百度
点击我,新窗口访问百度
6)表格
功能:主要负责网页中的数据采集;
表单具有三个基本组件:
表单
2、css描述页面的布局
用于美化页面,布局页面,使显示的数据更好看;
例如,为下图中的文字添加特殊效果。
1)CSS的三种使用方式
这里主要讲CSS选择器。CSS 选择器用于选择所需元素的样式。
要通过 CSS 选择器抓取网页内容,首先需要学习 CSS 选择器的语法。
‘#’:代表选择id节点,‘.’:代表class的节点;
获取嵌套:加空格代表层级关系,不加空格代表并列关系;
2)选择器类型
① 元素选择器
使用 HTML 标签名作为选择器,按标签名分类,为页面上的某类标签指定统一的 CSS 样式。优点是可以快速定位页面中同类型的标签。
h1 {
color: #F00;
font-size: 50px;
}
hello
② id 选择器
选择具有特定id属性值的元素;id 名称是 HTML 元素的 id 属性值。大多数 HTML 元素都可以定义 id 属性。元素的 id 值是唯一的,只能对应文档中的特定项。, id 选择器优先于元素选择器。
#demo1 {
color: #0f0;
}
hello css
如果 id 选择器是唯一的,使用 # 来定位
post_urls = response.css("#archive .floated-thumb .post-thumb a::attr(href)").extract()
for post_url in post_urls:
print(post_url)
PS:
xpath 解析返回一个选择器列表;
extract()[0]:转换为Unicode字符串列表的第一个位置;
③ 类选择器
类名是 HTML 元素的类属性的值。大多数 HTML 元素都可以定义 class 属性。类选择器的最大优点是它可以为元素对象定义单独的或相同的样式。
.myClass {
font-size: 25px;
}
hello
3)CSS选择器的详细使用
#container:选择id为container的节点
.container:选取所有class包含container的节点
Li a : 选取所有li下的所有a节点
Ul + p :选择ul 后面的第一个p元素
Div#container>ul :选取id为container的div的第一个ul子元素
Ul ~ P :选取与ul相邻的所有p元素
a[title] :选取所有有title属性的a元素
a[href=’http://jobbole.com’]:选取所有href属性为jobbole.com值的a元素
a[href*=”jobole”]:选取所有href属性包含的jobbole的a元素;
a[href^=”http”] : 选取所有href属性值为http开头的a元素;
a[href$=”.jpg”];选取所有href属性值以.jpg结尾的a元素;
input[type=radio]:checked 选择选中的radio的元素;
div:not(#container): 选取所有id非container的div属性;
li:nth-child(3):选取第三个li元素;
tr: nth-child(2n):选取第偶数个tr;
CSS 应用示例
Tiltle = response.css(".entry-header h1::text").extract()#提取title:*(用到伪类选择器)
Create_data=response.css(".entry-meta-hide-on-mobile::text").extract()[0].strip().replace(“·”,” ”)
Comment_num = response.css("a[href='#article-comment'] span::text").extract()[0];
Content = response.css("div.entry").extract()[0]
Tags=response.css(".entry-meta-hide-on-mobile a::text").extract()[0]
4)Python爬虫常用的CSS选择器
3、JavaScript 网页的行为
控制页面的元素,使页*敏*感*词*有一定的动态效果;
JavaScript 被添加为脚本语言以使 HTML 具有交互性,JavaScript 既可以嵌入 HTML 中,也可以在外部链接到 HTML。
例如,设置点击标题的点击事件可以使用 JavaScript 来实现。
1)作文
2)基本语法
(1)变量
使用 JavaScript 时,需要遵循以下命名约定:
① 必须以字母或下划线开头,中间可以是数字、字符或下划线;
② 变量名不能收录空格等符号;
③ 不能使用 JavaScript 关键字作为变量名,如:function 4.JavaScript 严格区分大小写;
(2)数据类型
基本型
1.Undefined,Undefined类型只有⼀个值,即undefined。当声明的变量未初始化时,该变 量的默认值是undefined。
2.Null,只有⼀个专⽤值null,表示空,⼀个占位符。值undefined实际上是从值null派⽣来 的,因此ECMAScript把他们定义为相等的。
3.Boolean,有两个值true和false
4.Number,表示任意数字
5.String,字符串由双引号(")或单引号(')声明的。JavaScript没有字符类型
参考类型
1.引⽤类型通常叫做类(class),也就是说,遇到引⽤值,所处理的就是对象。
2.JavaScript是基于对象⽽不是⾯向对象。对象类型的默认值是null。
3.JavaScript提供众多预定义引⽤类型(内置对象)。
3)基本操作
① alert():在页面弹出提示框
② innerHTML:向页面上的一个元素写入一段内容,覆盖原有内容
③ document.write():将内容写入页面
④ window.setInterval(code, millisec) :按照指定的周期(interval)执行函数或代码段。clearInterval() : 取消 setInterval() 设置的超时时间。
⑤ setTimeout(code, millisec) :在指定的毫秒数后调用函数或执行代码段。clearTimeout() : 取消 setTimeout() 设置的超时时间。
4)Python爬取javascript动态网页的两种解决方案
(1)使用dryscrape库动态抓取页面
JS 脚本由浏览器执行并返回信息。因此,在JS执行完后,抓取页面最直接的方法之一就是使用python来模拟浏览器的行为。
WebKit是一个开源的浏览器引擎,python提供了很多库来调用这个引擎,dryscrape就是其中之一,它调用webkit引擎来处理收录js等的网页。
import dryscrape
# 使用dryscrape库 动态抓取页面
def get_url_dynamic(url):
session_req=dryscrape.Session()
session_req.visit(url) #请求页面
response=session_req.body() #网页的文本
#print(response)
return response
get_text_line(get_url_dynamic(url)) #将输出一条文本
这也适用于其他收录js的网页。虽然可以满足爬取动态页面的要求,但缺点是速度慢。
不过也有道理,python调用webkit请求页面,页面加载的时候,加载js文件,让js执行,返回执行的页面,确实比较慢。
除此之外,还有很多库可以调用webkit:PythonWebkit、PyWebKitGit、Pygt(可以用它写浏览器)、pyjamas等也可以实现同样的功能。
(2)selenium web 测试框架
Selenium是一个web测试框架,可以调用本地浏览器引擎发送网页请求,也可以实现爬取页面的需求。
使用 selenium webdriver 可以工作,但会实时打开浏览器窗口。
def get_url_dynamic2(url):
driver=webdriver.Firefox() #调用本地的火狐浏览器,Chrom 甚至 Ie 也可以的
driver.get(url) #请求页面,会打开一个浏览器窗口
html_text=driver.page_source
driver.quit()
#print html_text
return html_text
get_text_line(get_url_dynamic2(url)) #将输出一条文本
可以看作是治标不治本。还有一个类似selenium的风车,不过感觉稍微复杂一点。
对于动态网页的爬取,可以找一些网站来练习,对爬虫友好,控制爬虫的访问频率,不要让你的爬虫被封禁。新手可以移步下面的文章看看,老大会定期直播分享自己的实战项目,大家可以跟着实践。
总之,爬虫的学习也是需要积累的,并不是说一两天就能学会。想要进入这个行业,在学习基础知识点的基础上,还有很多东西需要深入补充。最好系统地学习它。