Xpath(二)

mac2024-07-24  60

1.Xpath实例:

from lxml import etree html = ''' <bookstore>     <title>新华书店</title>     <book href="http://www.langlang2017.com/">         <title lang="eng">Harry Potter</title>         <price>29.99</price>     </book>     <book>         <title lang="zh">Learning XML</title>         <price>39.95</price>     </book>     <book href="www.baidu.com">         <title>python 大全</title>         <price>99.95</price>     </book> </bookstore> ''' tree = etree.HTML(html)

# (1)获取文档中的所有book节点的第一个book节点 result = tree.xpath("//book[1]") # (2)获取第一个book节点 result = result[0] # (3)获取first_book当前节点下的href result = result.xpath("./@href")

# (4)获取当前节点的父节点下的book节点的href属性 result = result.xpath('..//book/@href') # (5)获取价格小于40的书的书名 result =tree.xpath('//book[price<40]/title/text()') # (6)获取价格等于99.95的书的书名 result = tree.xpath('//book[price=99.95]/title/text()') # (7)获取book标签下面的title和price标签 result =tree.xpath('//book/title|//book/price') # (8)获取属性href含有baidu字符串的book标签,获取此标签的书名 result =tree.xpath('//book[contains(@href,"baidu")]/title/text()') # (9)获取去前面两个属于bookstore标签的字标签的book标签,获取此标签的书名 result =tree.xpath('//bookstore/book[position()<3]/title/text()') # (10)匹配任何属性节点 result =tree.xpath('//*[@*]') # (11)获取所有带有属性title标签,获取此标签的内容 result =tree.xpath('//title[@*]/text()')

2.爬取网站的流程: 1.确定网站哪个url是数据的来源。 2.简要分析一下网站结构,查看数据一般放在哪里。 3.查看是否有分页,解决分页的问题。 4.发送请求,查看response.text里面是否有我们想要的数据内容。 5.如果有数据,就用相应的提取数据的方法提取数据保存。     注意事项:         1.刚开做爬虫项目,先不要用类去做,只需要关注数据的来源等问题的解决,不要关注类结构的设计。 3.可迭代对象: 可迭代对象就是有__iter__属性的对象

迭代器:有__next__属性的对象

两个能转化吗?     使用iter()方法可转化:         iter(可迭代对象)----->迭代器。      可迭代对象有哪些:     list     dict     tuple     str     bytes     set     迭代器     生成器     文件流      如何打印一个文件同时输出行号。     fp = open('shabei_spider.py','r',encoding='utf-8')     print(fp) #如何输出行号。 for i,c in enumerate(fp,1):     print(i,c)    

4.反爬措施以及应对措施。     反爬策略:         (1)通过use-agent客户端标识来判断是否是爬虫             解决的办法:封装use-agent请求头。         (2)通过访问频率来判断。             解决的办法:设置爬取间隔。             a = random.randint(5)             time.sleep(a)         (3)封ip             解决的办法:设置代理ip         (4)页面内容无法直接获取数据,页面都是js代码。             selenium+phantomjs可以获取页面数据。             

5.动态Html页面的处理方法。     1.常见的一些页面技术:      (1)js         html使我们页面的骨架,css是页面装饰,js是页面的灵魂。      (2)jquery         jquery是一个js库,可以是js代码更加简化。      (3)ajax:web页面的异步请求,是一种技术。      (4)DHTML     2.selenium+phantomjs就可以处理这种问题。     (1)selenium:他是web自动测试工具。         pantomjs:他是一个无界面的浏览器。所以他可以运行js代码,帮我们拿到页面数据。         所以selenium+phantomjs就可以解决页面是js代码的这种网站数据的获取问题。     (2)selenium和phantomjs的下载         pip install selenium==2.48.0         百度phantomjs镜像     (3)phantomjs环境变量的配置:         有第三方插件的,都可以放在anaconda/scripts文件下面。     (4)chromedriver         chromedriver镜像,注意和自己的chrome浏览器版本对应。

最新回复(0)