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 。
两者区别:
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)