网页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的风车,不过感觉稍微复杂一点。

  对于动态网页的爬取,可以找一些网站来练习,对爬虫友好,控制爬虫的访问频率,不要让你的爬虫被封禁。新手可以移步下面的文章看看,老大会定期直播分享自己的实战项目,大家可以跟着实践。

  总之,爬虫的学习也是需要积累的,并不是说一两天就能学会。想要进入这个行业,在学习基础知识点的基础上,还有很多东西需要深入补充。最好系统地学习它。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线