爬虫,urllib,request和requests区别,BeautifulSoup、xpath以及正则的区别

在学习爬虫的时候,网上一大堆爬虫案例。告诉你这么写,告诉你那么写,看的眼花缭乱。
所谓爬虫,我总结出来,就两步,第一获取网页,第二查找有用信息。
但是在获取网页的时候,有的人写urlopen()方法,有的人写request.get方法,在查找有用信息的时候,有人用BeautifulSoup,有的人用xpath有的人甚至正则。
然后还把他们组合起来,一共好几种写法,看的头昏脑涨,一点规律也找不到,然后你的老师还说,找个例子模仿着写,啥也不是,让他滚开,好吧。
扯远了。。。撤回来
首先,一个简单的爬虫怎么写?
用urllib.request来写就是:

import urllib.request
import re
import os
web = urllib.request.urlopen("xxxx");#获取页面
cont = web.read() #获取页面完之后,一定要读,要不然获取的是一个response对象
pageHtml = web.decode('utf-8') #按照utf-8对象
print(pageHtml)
web.close #获取页面的方法也是流,要关的

这就获取到网页了
但是还有一种方式,我还可以这么写:

import requests
req2 = requests.get('xxxx')
print(req1.content.decode("gbk"))

其实requests是一个更高级的urllib的类,两者的作用都一样,但是就是写法不一样,让初学者很头疼,所里这里总结出来 ,推荐些requset.get,因为他简单高效。但是requsets并不是拿过来就能用,需要在cmd命令行里输入pip install

接下来是大头了。正则表达式,xpath以及BeatuifulSoup之间,三者的区别

import re 
pattern = u'<a\s*href="([\u0000-\uffff&&^"]*?)"'
#pattern = u'<a[\u0000-\uffff&&^[href]]*href="([\u0000-\uffff&&^"]*?)"'
res = re.finditer(pattern,pageHtml)#pattern是正则表达式,pageHtml在上面已经有了,这个代表的是上面已经给过得解码过的那个页码

这个就简单了,直接用re包,调用的是finditer方法,而且不止是finditer,还可以说findall。但是,又来了,又要区分差别,findall取出的是一个list,直接可以用如下代码:

res = re.findall(regular expression,pageHtml)
print(res)
for r in res:
    print(r)

findall是一个list,可以随时输出res这个列表,也可以随时输出里面的每一个元素。那我们接下来继续看看finditer吧

res = re.findall(regular expression,pageHtml)
for r in res :
   print r.group(1)

finditer返回的是一个MatchObject的iterator,需要迭代并通过MatchObject的方法输出。

接下来轮到xpath和etree的配合使用。因为xpath需要配合etree来使用吗,所以这是一个整体。

url = requests.get("http://www.biqukan.cc/book/20461/12592815_2.html").content.decode("gbk")
# 在这里面 etree.parre和etree.HTML都是对网页进行解析,HTML方法可以解析html网页,而parse可以解析文档之类
selector = etree.HTML(url)
selector1 = etree.parse()
# 这句话是xpath中最重要的一句话,通过标签来查找到自己想要的东西
lis = selector.xpath('xxx')
for i in range(len(lis)):
    print(lis[i].text)

但是在xpath中的东西怎么写:看过来

这是一个常见的HTML结构,那么我要是想要知道这个李华啥爱好呢?
看蓝色的,就一层一层的往下剥,从学生名单到爱好,最后自然就找出来了。但是如果节点太多了,我嫌写着一个一个麻烦死了怎么办?
那我就//籍贯。//这个意思就是我可以在任何位置匹配到后面任何一个想要的东西,注意是不考虑他们的位置。

最后最后最后:BeautifulSoup

from bs4 import BeautifulSoup
import urllib.request

html = urllib.request.urlopen('xxx')
html = html.read().decode("utf-8")
soup = BeautifulSoup(html)
image_list = soup.select('life_style1')
print soup.prettify()#打印soup对象的内容,格式化输出

在这其中有四大对象种类:
Tag
NavigableString
BeautifulSoup
Comment

那么在最后,xpath以及BeautifulSoup还有正则表达式。更适合什么场景,什么时候使用,首先bs4(beautifulsoup),是个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
xpath只能通过标签来获取内容。
而正则,可以获取你任何想要的内容。
但是一般的爬虫xpath就能够实现想要的功能了。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值