去发现生活中的美好,记录生活中的点点滴滴

python常用的两种爬虫方式

python admin 69℃

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

两者区别:

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)

转载请注明:永盟博客 » python常用的两种爬虫方式

喜欢 (1)