这是一个用于爬花瓣网的小姐姐照片的爬虫。
虽然以前跟着教程做过一个爬糗事百科的爬虫,但是那个太过基础,印象中只需要修改糗事百科后的页面id号就可以,然后配上正则表达式,获取可用的信息(作者、点赞数、日期等)。回想起来确实是一个十分入门的爬虫。
selenium
首先,参考一个知乎教程(网址不可考),运用了selenium包。其实质上是一个模拟浏览器测试的工具。下载了浏览器(常用如Firefox,Chrome)的Driver以后,可以模拟指定的浏览器。
from selenium import webdriver
profileDir = 'xxxxx'
profile = webdriver.FirefoxProfile(profileDir)
browser = webdriver.Firefox(profile)
browser.get(url)
html=browser.page_source
其中profile是所模拟的浏览器的配置,如果不设置的话就会以一个全新的浏览器访问(不包含cookie、插件等)。
selenium中有一个重要的概念叫做Wait
,但是在本次实验中,并没有体现出来Wait
的优越性,只能下次再深入研究了。:P
Wait
有一种应用就是在加载页面的时候,并不需要等到所有的元素都加载完毕再显示页面。而是使用selenium.webdriver.support.expected_conditions
在出现期待的情形是便停止加载。
parsel
parsel是Scrapy包中的解析模块。它集成了CSS和XPATH的选择方法,可以方便地在网页内容中选择到需要的部分。
本次主要是学习了XPath的用法,XPath是针对XML而言的,对于如下这个XML的例子
<?xml version="1.0" encoding="utf-8"?>
<Wikimedia>
<projects>
<project name="Wikipedia" launch="2001-01-05">
<editions>
<edition>en.wikipedia.org</edition>
<edition>fr.wikipedia.org</edition>
</editions>
</project>
<project name="Wiktionary" launch="2002-12-12">
<editions>
<edition>en.wiktionary.org</edition>
<edition>fr.wiktionary.org</edition>
</project>
</projects>
</Wikimedia>
其中常用有如下三类结点(node):
根(文档)结点 | 属性结点 | 元素结点 |
---|---|---|
wikipedia> | launch=”2001-01-05” | edition>en.wikipedia.org< /edition> |
我们就可以通过XPath来取得相应的结点。此外,在用parsel的时候,我们要注意两点:
首先,是关于parsel选择到的对象res也是一个Selector
的对象,还需要使用exact_first()
方法才能得到所需的结点值。
sel = parsel.Selector(text=text)
res = sel.xpath(your_xpath)
除了常规的Xml中的XPath之外,parsel的Selector还支持特殊的contains
操作。比如sel.xpath('//script[contains("XXXXX")]')
,在本例中,就是用这种方法找到动态网页中的JavaScript部分,然后利用js2xml
包中的parse函数变为XML,在取得目标的。