Learning Scrapy 0 HTML and XPath

The Learning Scrapy notes is based on the Learning Scrapy book.
基于 Learning Scrapy 的个人笔记

  • XPath可以在Chrome里直接复制,指定元素,右键复制提供对应的XPath地址

理解HTML and XPath

打开url的步骤
  1. 发送给服务器请求 URL (domian name(xxx.com) + other data(e.g. cookies)) send to server
  2. 收到服务器的HTML文件回复 (网页源代码) server replies with HTML document (or XML, JSON)
  3. 把文件转化为树形表示 HTML translated to a tree reprsentation insider a browser: DOM
  4. 对树形结构进行渲染 internal representation rendered
URL的组成
  1. 主域名,用来定位服务器,通过DNS(Domain Name System), 比如:

    • 发送urlhttps://mail.google.com/mail/u/0/#inbox,
    • 首先给mail.google.com发送一个DNS请求, 会解析为IP地址173.194.71.83.
    • 所以实际是https://173.194.71.83/mail/u/0/#inbox
  2. 其余信息,用来帮助服务器理解需求

原生HTML文件

基于World Wide Web规范的纯文本格式,就是网页源代码,
虽然是html文件,但是没有合适的空格。基本上全部挤在一起。
一个html文件由组成。

树形表示

是浏览器对HTML文件的一个’美化’, 具有可读性,增加空格,换行。
每个浏览器都对应的内部数据结构用来渲染页面。DOM表示是一个跨平台的表示被大多数浏览器支持。通过查看元素可以查看树形表示。

通过XPath提取HTML元素

XPath用来提取HTML中的指定元素。
在Chrome中的console中,输入$x('//h1'),即可return对应的<h1>元素

常用XPath表达
  • 会无视css元素?link link active都会选中

x(/html) x(‘/html/body’)
x(/html/body/div/p) x(‘/html/body/div/p[1]’) 选择对应的第一个p元素

/直接继承
//全选指定元素

$x('//p') 选择页面全部p元素
$x('//div/a') 直接在div元素下的a元素
$x('//div//a') 间接包含在div元素下的a元素
$x('//a/@class') 选中指定属性

$x('//a/text()') 选中text
$x('//div/*') 选中div下的全部元素

或者用筛选函数 not(),contains(), starts-with()
$x('//a[contains(@href, "iana")]')
$x('//a[starts-with(@href, "http://www.")]')
$x('//a[not(contains(@href, "abc"))]')

常见example:
//*[contains(@class,"ltr") and contains(@class,"skin-vector")]//h1//text()

拔取每一幅图片//img/@src

应对HTML变化

  • 避免过多的结构
    比如//*[@id="myid"]/div/div/div[1]/div[2]/div/div[1]/div[1]/a/img
    可以换成 //div[@class="thumbnail"]/a/img
  • classes应该选择更有针对性的
  • IDs 针对性更强 //[@id="order-F4982322"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值