python常用方法_python常用的两种爬虫方式

python爬虫有很多种方式,也有很多爬虫库和爬虫框架,这里主要介绍常用的两种:

爬虫方式一:requests+BeautifulSoup

pip install beautifulsoup4

# 爬虫方式一:requests+BeautifulSoup

import requests

from bs4 import BeautifulSoup

html = "http://blog.ganyongmeng.com/?page_id=27"

html_cont = requests.get(html)

html_cont = html_cont.content

soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='UTF-8')

print soup.find("div", class_="content").find("article", class_="excerpt excerpt-nothumbnail").find("header").find("h2").find("a").get_text()

对于BeautifulSoup,官网的介绍:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

爬虫方式二:requests+lxml(xpath)

pip install lxml

#爬虫方式二:requests+lxml(xpath)

from lxml import etree

import requests

html = "http://blog.ganyongmeng.com/?page_id=27"

html = requests.get(html).content.decode('utf-8')

dom_tree = etree.HTML(html)

links = dom_tree.xpath('/html/body/section/div[2]/div/article[1]/header/h2/a')

for index in range(len(links)):

print(links[index].tag)

print(links[index].attrib)

print(links[index].text)

使用lxml库,可以使用XPath技术方便的查询所需要的节点数据。XPath(XML Path Language)是一门在XML文档中查找信息的语言,可用来在XML(XML和HTML)中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

另外,可以通过谷歌或者火狐浏览器快速定位元素后复制出需要的XPath 。

xpath-300x192.jpg

两者区别:

1、BeautifulSoup是一个第三方的Python库,BeautifulSoup是用python写的;XPath是一门查找技术,xpath是用c写的;

2、BeautifulSoup和XPath的原理不一样,BeautifulSoup是基于DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多。而lxml只会局部遍历。

3、性能 lxml >> BeautifulSoup

以上两种爬虫方式,主要是爬取渲染好的HTML节点数据,如果是js渲染的数据,就无法爬取到了,那么对于js渲染的HTML数据,如何爬取呢?

这里提供三种思路,更多的大家可以去挖掘:

1、如果js是通过链接请求,则可以直接通过js链接获取解析数据;

2、如果js是写在页面上,可以通过原生的正则匹配数据;

3、使用selenium库,模拟浏览器使js渲染数据后获取数据,这里有详细说明>>>;

下期我们介绍爬虫框架(Scrapy等https://www.zhihu.com/question/60280580)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值