「爬虫」19利用PhantomJS编写爬虫程序

2020-02-11  本文已影响0人  林拂晓

虽然PhantomJS的开发者已经停止更新了,但现存版本依旧可以使用,仍然可以用来解决爬虫中遇到的某些问题,所以还是很值得了解学习一下的。

(1)下载https://phantomjs.org/download.html

官网windows版本下载

(2)安装

①解压压缩包到指定目录;

②将~/phantomjs/bin添加到主机环境变量中,在cmd中输入>>>phantomjs,进入phantomjs shell即为配置成功;

cmd模式进入PhantomJs

③要在python IDLE中使用phantomjs,还必须安装selenium模块。

(3)基本爬虫使用方法

前提:from selenium import webdriver

①打开

>>>browser=webdriver.PhantomJS()

②浏览网页

>>>url="http://www.baidu.com"

>>>browser.get(url)

③直接把爬取的网页截图

>>>browser.get_screenshot_as_file("G:/DA/file/pjs1.png")

④直接获取页面源代码

page_code=browser.page_source

⑤正则表达式提取网页title

Import re

pat_title="<title>(.*?)</title>"

title1=re.compile(pat_title).findall(page_code)

print(title1)

⑥xpath表达式提取网页title(必须先将page_code转为tree,再进行xpath提取)

from lxml import etree

edata=etree.HTML(page_code)

title2=edata.xpath("/html/head/title/text()")

print(title2)

⑦关闭浏览器

>>>browser.quit()

(4)实现自动登录豆瓣

豆瓣登录窗口

①短信登录

PhantomJS实现短信验证登录

②账号密码登录

PhantomJS实现账号密码验证登录

【注】WebDriver8种基本元素定位方法:

①find_element_by_id():根据id属性进行定位;

例如:find_element_by_id(“one”)定位id为one的元素。

②find_element_by_name():根据name属性进行定位;

例如:find_element_by_name(“one”):定位name属性为one的元素。

③find_element_by_class_name():根据class的名字进行定位;

例如:find_element_by_class_name(“one”)定位class为one的元素。

④find_element_by_xpath():xpath是XML路径语言,通过确定xml文档中的元素位置来完成对元素的定位;

例如:find_element_by_xpath("//div[@id=‘one']")定位id为one的div元素;find_element_by_xpath("//*[@class=‘two']")定位class为two的元素。

⑤find_element_by_css_selector():根据css属性进行定位;

例如:find_element_by_css_selector("#one")定位id为one的div元素;find_element_by_css_selector(".two")定位class为two的元素。

⑥find_element_by_tag_name ():根据标签名进行定位;

例如:find_element_by_tag_name(“input”)定位input元素。

⑦find_element_by_link_text():根据完整a链接文字进行定位find_element_by_partial_link_text() 根据部分a链接文字进行定位;

例如:find_element_by_link_text(“新闻”) 定位文字为‘新闻'的a元素;find_element_by_partial_link_text(“闻”) 定位文字包括‘闻'的a元素。

⑧By定位( 需要导入By类:from selenium.webdriver.common.by import By );

例如:find_element(By.ID,“one”)定位id为one的元素;find_element(By.NAME,“one”)定位name属性为one的元素;find_element(By.CLASS_NAME,“one”)定位class为one的元素;find_element(By.TAG_NAME,“div”)定位div元素。

Ps:当定位元素为多个时,使用elements复数定位,即把定位方法中的element换成elements,此时获取到的为相同属性的一组元素,返回一个list队列,然后可以再去定位单个元素;

例如:find_elements_by_class_name(“one”)[1],定位class为one的所有元素中第二个元素。

上一篇下一篇

猜你喜欢

热点阅读