1.正则表达式是进行内容匹配,将符合要求的内容全部获取;xpath()能将字符串转化为标签,它会检测字符串内容是否为标签,但是不能检
测出内容是否为真的标签;Beautifulsoup是Python的一个第三方库,它的作用和 xpath 作用一样,都是用来解析html数据的相比之下,
xpath的速度会快一点,因为xpath底层是用c来实现的
2.三者语法不同,正则表达式使用元字符,将所有获得内容与匹配条件进行匹配,而xpath和bs4将获取的解析后的源码进行按条件筛选,筛选
出想要的标签即根据标签属性来找到指定的标签,之后对标签进行对应内容获取。
下面通过代码来区分它们:
import re
from lxml import etree
from bs4 import BeautifulSoup
from urllib.request import urlopen,Request
url = 'https://www.meishij.net/chufang/diy/?&page=1'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
def get_code(url):
request = Request(url,headers=headers)
response = urlopen(request)
code = response.read().decode()
return code
# 正则表达式可以直接找到所有符合匹配条件的值,并将每个符号要求的结果定义成元组装进列表中
def pattern(code):
pattern = re.compile(r'<img class="img".*?alt="(.*?)".*?src="(.*?)">',re.S)
result = pattern.findall(code)
print(result)
def xpath(code):
root = etree.HTML(code)
# 从根标签开始,找到所有类名为img的img标签
img_list = root.xpath('//img[@class="img"]')
for value in img_list:
name = value.xpath('@alt')[0]
img = value.get('src')
print(name,img)
def beautifulsoup(code):
# 用beautifulsoup()方法解析所得的数据的每个节点都是类
# 使用bs.XX 获取所有XX当中的第一个XX以及第一个XX里面的内容
# 因此爬虫时要用select(),它可以获取所有的符合要求的标签
bs = BeautifulSoup(code,'lxml')
img_list = bs.select('img.img')
# img_list是一个列表,里面包含了所有类名为img的img标签,将标签进行遍历通过get()即可得到标签内对应的内容
for value in img_list:
name = value.get('alt')
img = value.get('src')
print(name,img)
code = get_code(url)
regular(code)
xpath(code)
beautifulsoup(code)
对于初学者楼主建议还是先从正则学起,比较基础易懂,而且实用。
之后主流个人推荐xpath