正则、xpath、bs4三者区别

本篇以 获取美食杰菜谱图片 为例,分别采用正则、xpath、bs4 三种方式,获取同一内容,进行对比,分析三者区别。

url = https://www.meishij.net/chufang/diy/guowaicaipu1/japan/

headers = {
    User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
}

1.正则方法:

import  re
from urllib.request import Request,urlopen

request = Request(url ,headers=headers)
# 获取响应
response = urlopen(request)
code = response.read().decode()
pattern = re.compile(r<div class="listtyle1".*?>.*?<a.*?class="big".*?title="(.*?)".*?>.*?<img class="img".*?src="(.*?)".*?>.*?<div class="c1">.*?<span>(.*?)</span>,re.S)
result = pattern.findall(code)
# print(result)
for image in result:
    image_alt =image[0]
    image_src = image[1]
    image_rq = image[2].split( )[3]
    print(image_alt+(+image_rq+人气+),image_src)

2.xpath方法:

from lxml import etree
import requests

response = requests.get(url,headers = headers)
# print(response)# 将字符串转化为html代码
root = etree.HTML(response.content)
image_list = root.xpath(//div[@class="listtyle1"]/a)
for image in image_list:
      # . : 表示从当前节点开始获取
    image_alt = image.xpath(./img/@alt)[0]
    image_src = image.xpath(./img/@src)[0]
    image_rq = image.xpath(./div/div/div/span/text())[0].split( )[3]
      # 拼接内容
    print(image_alt+(+image_rq+人气+),image_src)

3.bs4方法:

from bs4 import BeautifulSoup
import requests
# from lxml import etree
response = requests.get(url , headers = headers).content
soup = BeautifulSoup(response,lxml)
image_list = soup.select(div.listtyle1)
# print(image_list)
for tag in image_list:
     value = tag.find_all(img)
     # print(value)
     for image in value:
         image_alt = image.get(alt)
         image_src = image.get(src)
         # print(image_alt)
         # print(image_src)
     image_rq = tag.span.string.split( )[3]
     # print(image_rq)
     print(image_alt+(+image_rq+人气+),image_src)

三者输出结果如下:

经验分享 程序员 微信小程序 职场和发展