课程地址:
爬虫层面:抓取,解析,入库
NO1.谷歌浏览器按照xpath
https://jingyan.baidu.com/article/1e5468f94694ac484861b77d.html
另一种方式
如若依旧不行,请使用谷歌翻墙,浏览器内搜索xpath helper安装
NO2.xpath解析方式
xpath案例:
import requests
from lxml import etree
def demo1():
"""
需求:抓取爱奇艺电影页面,获得一页的电影名称
1.请求页面:ok的
2.解析页面:
1)谷歌浏览器写xpath解析方式
2)解析方式放入程序,解析对应的数据
:return:
"""
response = requests.get('https://list.iqiyi.com/www/1/-------------11-1-1-iqiyi--.html')
dom = etree.HTML(response.text)
name_list = dom.xpath( "//ul[@class='qy-mod-ul']/li//p[@class='main']/a/@title")
pass
if __name__ == '__main__':
demo1()
pass
NO3.xpath各种写法:
http://www.w3school.com.cn/xpath/index.asp
1.节点、节点属性、节点与节点之间的关系
"""
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title> '//book/title[@lang="en"]'
<title lang="ch">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
"""
2.xpath书写规则
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取,也表示某个节点的下一级节点(某个节点下面的儿子)/html/body/iframe |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(某个节点下面的子子孙孙)//body/iframe |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。//body/../等同于/html |
@ | 选取属性。 |
3.xpath谓语
网页案例:https://movie.douban.com/chart
路径表达式 | 结果 |
---|---|
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。//div[@class='indent']/div/table[1] |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。//div[@class='indent']/div/table[last()] |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。//div[@class='indent']/div/table[last()-1] |
/bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。//div[@class='indent']/div/table[position()<3] |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。//div[@class] |
//title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。//div[@class='indent'] |
/bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 |
/bookstore/book[price>35.00]/title | 选取 bookstore 元素中的 book 元素的所有 |
需求:查找分数大于8.0的table标签(一部电影数据)
1.找到用于判定比较大小的标签
2.根据上级往上最终找到table
//div[@class='indent']//div[@class='star clearfix'][span[@class='rating_nums']>8.0]/../../../../..
4.xpath运算
运算符 | 描述 | 实例 | 返回值 |
---|---|---|---|
| | 计算两个节点集 | //book | //cd | 返回所有拥有 book 和 cd 元素的节点集 |
or | 或 | price=9.80 or price=9.70 | 如果 price 是 9.80,则返回 true。 如果 price 是 9.50,则返回 false。 |
and | 与 | price>9.00 and price<9.90 | 如果 price 是 9.80,则返回 true。 如果 price 是 8.50,则返回 false。 |
需求:选取所有电影的table标签
//div[@class='indent']//table
//div[@class='article']//table
//div[@id='content']//table
==>//div[@class='indent'|@class='article'|@id='content']//table(无论哪个属性变了,都不会影响解析的兼容性)
需求:如果一个div的某一个属性值和其他div一样,我们可以通过多个div属性值进行定位,使用and连接
//div[@id='db-global-nav' and @class='global-nav']