Python教程

python-网络爬虫

本文主要是介绍python-网络爬虫,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、常用模块

webbrowser:python自带,打开浏览器获取指定页面

requests:从网上下载文件和网页

Beautiful Soup:解析html

selenium:启动并控制一个web浏览器

2、启动新的浏览器,打开指定URL ,使用open()函数

import webbrowser

webbrowser.open('http://inventwithpython.com/')

3、下载网页requests.get()

import requests

res=requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')

res.status_code=requests.codes.ok

print(res.text[:300])

检查错误:raise_for_status() 如果下载文件出错,则抛出异常;如果文件成功,则什么都不做。

import requests

res=requests.get('http://www.inventwithpyton.com/page_that_does_not_exist')

try:

        res.raise_for_status()

except Except as exc:

print('There was a problem: %s' %(exc))

注意:一定在requests.get()之后再调用raise_for_status()

4、下载文件到本地步骤

1)调用requests.get()下载该文件

2)用'wb'调用open(),以写二进制方式打开新文件

3)使用Response对象的iter_content()方法循环

4)每次迭代中调用write(),将内容写入该文件

5)调用close()关闭该文件

代码如下:

import requests

res=requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')

res.raise_for_status()

playFile=open('RomeoAndJuliet.txt','wb')

for chunk in res.iter_content(100000):

        playFile.write(chunk)

playFile.close()

5、解析html

1)安装bs4

pip install beautifulsoup4

2)引用bs4

import bs4

3)创建BeautifulSoup对象

bs4.BeautifulSoup(res.txt)

4)select()方法寻找元素

soup.select('div')        所有名为<div>的元素

soup.select('#author')        带有id属性为author的元素

soup.select('.notice')        所有使用CSS class属性名为notice的元素

soup.select('div span')        所有在<div>元素之内的<span>元素

soup.select('div>span')        所有直接在<div>元素内的<span>元素,中间没有其他元素

soup.select('input[name]')        所有名为<input>,并有一个name属性,其值无所谓的元素

soup.select('input[type="button"]')        所有名为<input>,并有一个type属性,其值为button的元素

代码如下:

import bs4

exampleFile=open('example.html')

exampleSoup=bs4.BeautifulSoup(exampleFile.read())        #创建BeautifulSoup对象

elems=examples.select('#author')

elems[0].getText()

str(elems[0])

elems[0].attrs

pElems=exampleSoup.select('p')

str(pElems[0])

pElems[0].getText()

str(pElems[1])

pElems[1].getText()

通过元素属性获取数据:get()

代码如下:

import  bs4

soup=bs4.BeautifulSoup(open('example.html'))

spanElem=soup.select('span')[0]

str(spanElem)

spanElem.get('id')        #获取id属性的值

spanElem.attrs        #元素属性

6、使用selenium控制浏览器

这些例子基于FireFox浏览器,需要先安装FireFox浏览器,下载地址:http://getfirefox.com/

导入selenium,不是import selenium,而是from selenium import webdriver

1)浏览器打开URL,代码如下

from selenium import webdriver

browser=webdriver.Firefox()

browser.get('http://inventwithpython.com')

2)页面中寻找元素

browser.find_element_by_class_name(name)        使用CSS类name的元素

browser.find_elements_by_class_name(name)

browser.find_element_by_class_selector(selector)        匹配CSS selector的元素

browser.find_elements_by_class_selector(selector)

browser.find_element_by_id(id)        匹配id属性值的元素

browser.find_elements_by_id(id) 

browser.find_element_by_link_text(text)        完全匹配提供的text的<a>元素

browser.find_elements_by_link_text(text)

browser.find_element_by_partial_link_text(text)        包含提供的text的<a>元素

browser.find_elements_by_partial_link_text(text) 

browser.find_element_by_name(name)        匹配name属性值的元素

browser.find_elements_by_name(name)   

browser.find_element_by_tag_name(name)        匹配标签name的元素  

browser.find_elements_by_tag_name(name) 

除了*_by_tag_name()方法,所有方法的参数都区分大小写。如果没有找到匹配的元素,selenium就会抛出NoSuchElement异常。需要把异常程序放在try和except中。

WebElement属性及方法:

tag_name:标签名

get_attribute(name):该元素的name属性的值

text:        该元素内的文本

clear():        对于文本字段或文本区域元素,清除其中输入的文本

is_displayed():        如果元素可见,返回True,否则返回False

is_enabled():        对于输入元素,如果该元素启用,返回True,否则返回False

is_selected():        对于复选框或者单选框元素,如果该元素被选中,返回True,否则返回False

location:        一个字典,包含'x'和'y',表示该元素在页面上的位置

代码如下:

from selenium import webdriver

browser=webdriver.Firefox()

browser.get('http://inventwithpython.com')

try:

        elem=browser.find_element_by_class_name('bookcover')

        print('Found <%s> element with that class name!' %(elem.tag_name))

except:

        print('Was not able to find an element with that name.')

点击页面,代码如下:

from selenium import webdriver

browser=webdriver.Firefox()

browser.get('http://inventwithpython.com')

linkElem=browser.find_element_by_link_text('Read It Online')

linkElem.click()

填写并提交表单

from selenium import webdriver

browser=webdriver.Firefox()

browser.get('http://gmail.com')

emailElem=browser.find_element_by_id('Email')

emailElem.send_keys('robot@gmail.com')

passwordElem=browser.find_element_by_id('Passwd')

passwordElem.send_keys('123456')

passwordElem.submit()

特殊键整理

Keys.DOWN,Keys.UP,Keys.LEFT,Keys.RIGHT        键盘箭头键

Keys.ENTER,Keys.RETURN        回车和换行键

Keys.HOME,Keys.END,Keys.PAGE_DOWN,Keys.PAGE_UP        Home键,End键,PageUp键,PageDown键

Keys.ESCAPE,Keys.BACK_SPACE,Keys.DELETE        Esc、Backspace和Delete

Keys.F1,Keys.F2.........Keys.F12        键盘顶部的F1到F12键

Keys.TAB        Tab键

代码如下:

from selenium import webdriver

from selenium.webdriver.common.keys

import keys

browser=webdriver.Firefox()

browser.get('http://nostarch.com')

htmlElem=browser.find_element_by_tag_name('html')

htmlElem.send_keys(Kesy.END)        #scrolls to bottom

htmlElem.send_keys(Keys.HOME)        #scrolls to top

浏览器按钮:

browser.back():        点击返回按钮

browser.forward():        点击前进按钮

browser.refresh():        点击刷新按钮

browser.quit():        点击关闭窗口按钮

这篇关于python-网络爬虫的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!