所谓网络爬虫,通俗的讲,就是通过向我们需要的URL发出http请求,获取该URL对应的http报文主体内容,之后提取该报文主体中我们所需要的信息。
下面是一个简单的爬虫程序
http基本知识
当我们通过浏览器访问指定的URL时,需要遵守http协议。本节将介绍一些关于http的基础知识。
http基本流程
我们打开一个网页的过程,就是一次http请求的过程。这个过程中,我们自己的主机充当着客户机的作用,而充当客户端的是浏览器。我们输入的URL对应着网络中某台服务器上面的资源,服务器接收到客户端发出的http请求之后,会给客户端一个响应,响应的内容就是请求的URL对应的内容,当客户端接收到服务器的响应时,我们就可以在浏览器上看见请求的信息了。
我们可以通过python的requests模块很方便的发起http请求。requests模块是第三方模块,安装完成之后直接import就能使用。下面介绍一些简单的用法
发起请求
import requests # 请求的首部信息 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36' } # 例子的url url = 'https://voice.hupu.com/nba' # 虎扑nba新闻 # 利用requests对象的get方法,对指定的url发起请求 # 该方法会返回一个Response对象 res = requests.get(url, headers=headers) # 通过Response对象的text方法获取网页的文本信息 print(res.text)
上面的代码中,我们向虎扑的服务器发送了一个get请求,获取虎扑首页的nba新闻。headers参数指的是http请求的首部信息,我们请求的url对应的资源是虎扑nba新闻的首页。获取到对应的网页资源之后,我们需要对其中的信息进行提取。
通过BeautifulSoup提取网页信息
BeautifulSoup库提供了很多解析html的方法,可以帮助我们很方便地提取我们需要的内容。我们这里说的BeautifulSoup指的是bs4。当我们成功抓取网页之后,就可以通过BeautifulSoup对象对网页内容进行解析。在BeautifulSoup中,我们最常用的方法就是find()方法和find_all()方法,借助于这两个方法,可以轻松地获取到我们需要的标签或者标签组。关于其他的方法,可以参考bs4的官方文档:BeautifulSoup
find()方法和find_all()方法的用法如下
find(name , attrs , recursive , string , **kwargs ) # find_all()方法将返回文档中符合条件的所有tag, find_all(name , attrs , recursive , string , **kwargs )
from bs4 import BeautifulSoup # BeautifulSoup对象接收html文档字符串 # lxml是html解析器 soup = Beautiful(res.text, 'lxml') # 下面的方法找出了所有class为hello的span标签 # 并将所有的结果都放入一个list返回 tags = soup.find_all('span', {'class': 'hello'})
实例扩展:
实例一:
#第一种方法 import urllib2 #将urllib2库引用进来 response=urllib2.urlopen("http://www.baidu.com") #调用库中的方法,将请求回应封装到response对象中 html=response.read() #调用response对象的read()方法,将回应字符串赋给hhtml变量 print html #打印出来
实例二:
#第二中方法 import urllib2 req=urllib2.Request("http://ww.baidu.com") response=urllib2.urlopen(req) html = response.read() print html
到此这篇关于用python写爬虫简单吗的文章就介绍到这了,更多相关python写爬虫难吗内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!