简单的爬虫程序

Published on with 0 views and 0 comments

前~~~

本站目的是介绍一些基本应用,组件的组合应用就看每个人的理解了,文档也是很多的就不详细写了。每一篇基本都是基础应用,看文档应该是每个程序员的基本人生吧,感谢。

起步

本介绍的目的是方便大家来使用一些基本组件,爬数据不是目的,偷取别人的私密数据也是违规的,所以仁者见仁智者见智,大家搞一些爱好的基本分析还是可以的。
在爬一些简单数据的时候,一般会遇到几种问题,常见的呢就是:跨域、登录验证乱七八糟的,不过这些都和我今天说的方法没啥关系,因为今天用的是selenium库,也就是自动化web测试工具。一般用selenium做测试的比较多,在我们这里,使用他做一些其他有趣的事情。

环境

python3 的环境,这个就不说了
有了环境之后安装selenium包

pip3 install selenium -i  https://pypi.doubanio.com/simple

老规矩还是豆瓣源,速度快
安装了库是无法使用的,我们还需要chromedriver这种浏览器驱动才行,fox或者chrome都支持,不过我习惯用chromedriver,这里都已chromedriver来举例了,反正也没什么区别。
在这里我上传一份
chromedriver.zip

接下来我们先使用selenium打开网页,直接贴代码:

from selenium import webdriver
## 如果是chrome浏览器的驱动
driver = webdriver.Chrome("./chromedriver")

driver.get("https://www.qidian.com/")

运行这段代码,可以看到浏览器已经运行起来了,而且打开了起点网站。

Selenium使用

selenium

这里边列一些我们常用的selenium方法,只列几个常用的吧。

driver.get(url)

发起请求,这个就不多说了哈

driver.title()

获取请求网页的标题

driver.find_element_by_id("id")

获取指定id中的内容

find_elements_by_id("id")

获取所有指定id中的内容

find_element_by_link_text(link_text)

根据准确文字获取定位

find_elements_by_link_text(link_text)

根据准确文字获取定位

find_element_by_xpath(xpath)

用xpath定位标签,xpath之后相信说一

find_elements_by_xpath(xpath)

同上

find_element_by_partial_link_text(self,link_text)

根据模糊文字获取定位
------带s的我都不写了,靠太累了,基本就是这个意思

find_element_by_tag_name(name)

通过标签名进行定位

find_element_by_class_name(name)

通过class标签定位

driver.send_keys("balbala")

向标签输入内容

driver.is_displayed()

判断某个元素是否存在

driver.execute_script(self, script, *args)

执行js脚本

driver.current_url

获取当前driver的url

driver.page_source

获取当前driver的html

driver.close()

关闭当前窗口

driver.quit()

关闭所有窗口

driver.current_window_handle

获取当前窗口,因为有时候进行跳转,这个是非常有必要的

driver.current_window_handle

获取所有窗口

driver.switch_to()

切换窗口

driver.get_cookies()

得到cookies信息

driver.add_cookie(self,cookie_dict)

添加cookies,实现自动登录

driver.implicitly_wait(self, time_to_wait)

等待页面加载时间

driver.set_script_timeout(self, time_to_wait)

设置等待超时时间
还有很多就,,,先不说了

xpath

简单的说一下xpath的语法哈,非常简单的说一下
例如我有一个标签

<div id="name">symoon</div>

我像获得symoon,怎么获得呢?用xpath做如下操作

//div[@id="name"]

这样我们可以拿到这个标签,然后怎么操作,哈哈不说了,在xpath里面也可以直接取text
接下来再介绍几个方法,就不一一举例了

//*[contains(text(),'symoon']

模糊匹配

//*[contains(@name,'123')]

模糊匹配某个属性

//span[starts-with(@id,'s_kw_')]

匹配以什么开头

//span[ends-with(@id,'kw_wrap')]

匹配以什么结尾

//*[matchs(text(),'hao13')]

模糊匹配正则
因为我们本文主要说selenium获取数据,就不介绍其他的什么获取href值啊什么的了哈

示例使用

一个简单的使用,来获取一下当前页面所有小说的名称

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome("./chromedriver",options=chrome_options)
book_list=[]
driver.get("https://www.qidian.com/")
ele=driver.find_elements_by_xpath("//div[@class='book-list']//li//a[@class='name']")
for item in ele:
    if item.text:
        book_list.append(item.text)

可以看到我多加了一个options,是为了进行无头模式,也就是不打开浏览器直接进行操作。
取出来的结果就是当前页面所有小说名称了。
再进行一个小的跳转

from selenium import webdriver
driver = webdriver.Chrome("./chromedriver")
book_list=[]
driver.get("https://www.qidian.com/")
ele=driver.find_elements_by_xpath("//div[@class='book-list']//li//a[@class='name']")
ele[0].click()

还是同样的xpath,这里我们对第一个标签进行了点击事件,取消了无头模式,这样我们的页面会直接跳过去。哈哈,就到这,高深的使用大家一起研究吧。
提醒下哈,无头模式还可以用在乱七八糟程序里,因为又不用打开浏览器,可以根据实际情况使用拉

------------------------- 走在路上的symoon