婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中

python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中

熱門標(biāo)簽:舉辦過冬奧會的城市地圖標(biāo)注 qt百度地圖標(biāo)注 正安縣地圖標(biāo)注app 螳螂科技外呼系統(tǒng)怎么用 遼寧智能外呼系統(tǒng)需要多少錢 阿里電話機(jī)器人對話 電銷機(jī)器人系統(tǒng)廠家鄭州 地圖地圖標(biāo)注有嘆號 400電話申請資格

幫朋友制作一個網(wǎng)站,需要一些產(chǎn)品數(shù)據(jù)信息,因?yàn)槭谴砥渌井a(chǎn)品,直接爬取代理公司產(chǎn)品數(shù)據(jù)

1.設(shè)計(jì)數(shù)據(jù)庫

from django.db import models
from uuslug import slugify
import uuid
import os


def products_directory_path(instance, filename):
  ext = filename.split('.')[-1]
  filename = '{}.{}'.format(uuid.uuid4().hex[:8], ext)
  # return the whole path to the file
  return os.path.join('images', "products", instance.title, filename)


def product_relatedimage_directory_path(instance, filename):
  ext = filename.split('.')[-1]
  filename = '{}.{}'.format(uuid.uuid4().hex[:8], ext)
  # return the whole path to the file
  return os.path.join('images', "product_relatedimage", instance.product.title, filename)


class ProductsCategory(models.Model):
  """產(chǎn)品分類"""
  name = models.CharField('產(chǎn)品分類名', max_length=80, unique=True)
  description = models.TextField('產(chǎn)品分類描述', blank=True, null=True)
  slug = models.SlugField('slug', max_length=80, blank=True, null=True)
  parent_category = models.ForeignKey('self', verbose_name="父級分類", blank=True, null=True, on_delete=models.CASCADE)

  def save(self, *args, **kwargs):
    if not self.id or not self.slug:
      self.slug = slugify(self.name)
    super().save(*args, **kwargs)

  def __str__(self):
    return self.name

  class Meta:
    ordering = ['name']
    verbose_name = "產(chǎn)品分類"
    verbose_name_plural = verbose_name


class ProductsTag(models.Model):
  """產(chǎn)品標(biāo)簽"""
  name = models.CharField('產(chǎn)品標(biāo)簽名', max_length=30, unique=True)
  slug = models.SlugField('slug', max_length=40)

  def __str__(self):
    return self.name

  def save(self, *args, **kwargs):
    if not self.id or not self.slug:
      self.slug = slugify(self.name)
    super().save(*args, **kwargs)

  class Meta:
    ordering = ['name']
    verbose_name = "產(chǎn)品標(biāo)簽"
    verbose_name_plural = verbose_name


class Product(models.Model):
  title = models.CharField('標(biāo)題', max_length=255, unique=True)
  slug = models.SlugField('slug', max_length=255, blank=True, null=True)
  jscs = models.TextField('技術(shù)參數(shù)', blank=True, null=True)
  image = models.ImageField(upload_to=products_directory_path, verbose_name="產(chǎn)品圖片")
  views = models.PositiveIntegerField('瀏覽量', default=0)
  category = models.ForeignKey('ProductsCategory', verbose_name='分類', on_delete=models.CASCADE, blank=True, null=True)
  tags = models.ManyToManyField('ProductsTag', verbose_name='標(biāo)簽集合', blank=True)

  def save(self, *args, **kwargs):
    if not self.id or not self.slug:
      self.slug = slugify(self.title)
    super().save(*args, **kwargs)

  def update_views(self):
    self.views += 1
    self.save(update_fields=['views'])

  def get_pre(self):
    return Product.objects.filter(id__lt=self.id).order_by('-id').first()

  def get_next(self):
    return Product.objects.filter(id__gt=self.id).order_by('id').first()

  def __str__(self):
    return self.title

  class Meta:
    verbose_name = "產(chǎn)品"
    verbose_name_plural = verbose_name


class ProductAdvantage(models.Model):
  content = models.TextField('產(chǎn)品優(yōu)勢', blank=True, null=True)
  product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True)

  def __str__(self):
    return self.content

  class Meta:
    verbose_name = "產(chǎn)品優(yōu)勢"
    verbose_name_plural = verbose_name


class ProductBody(models.Model):
  body = models.CharField('產(chǎn)品內(nèi)容', max_length=256, blank=True, null=True)
  product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True)

  def __str__(self):
    return self.product.title

  class Meta:
    verbose_name = "產(chǎn)品內(nèi)容"
    verbose_name_plural = verbose_name

2.腳本編寫

2.1編寫獲取網(wǎng)頁源代碼函數(shù)

def get_one_page(url):
  try:
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    res = requests.get(url=url, headers=headers)
    res.encoding = 'utf-8'
    if res.status_code == 200:
      return res.text
    else:
      return None
  except Exception:
    return None

2.2根據(jù)base頁面獲取所有產(chǎn)品分類頁面鏈接

if __name__ == '__main__':
  content = get_one_page(url)
  tree = etree.HTML(content)
  # 產(chǎn)品分類url
  catgory_urls = tree.xpath('//div[@class="fdh-01-nav"]/div/h3/a/@href')
  # 處理catgory_urls
  for url in catgory_urls:
    url = 'http://www.kexinjianji.com' + url
    print(url)

2.3根據(jù)產(chǎn)品分類頁面鏈接獲取對應(yīng)所有產(chǎn)品鏈接

if __name__ == '__main__':
  content = get_one_page(url)
  tree = etree.HTML(content)
  # 產(chǎn)品分類
  catgory = tree.xpath('//div[@class="cplb-3n-ts-03 b"]/h3/span/text()')
  print("產(chǎn)品分類:" + catgory[0])
  # 該分類下產(chǎn)品url
  urls = tree.xpath('//div[@class="cplb-3n-ts-03-list"]/dl/dt/a/@href')
  # 處理url
  for url in urls:
    url = 'http://www.kexinjianji.com' + url
    print(url)
  print("=====================================================")

兩者結(jié)合起來就可以打印出所有產(chǎn)品鏈接

if __name__ == '__main__':
  content = get_one_page(url)
  tree = etree.HTML(content)
  # 產(chǎn)品分類url
  catgory_urls = tree.xpath('//div[@class="fdh-01-nav"]/div/h3/a/@href')
  # 處理catgory_urls
  for url in catgory_urls:
    url = 'http://www.kexinjianji.com' + url
    content = get_one_page(url)
    tree = etree.HTML(content)
    # 產(chǎn)品分類
    catgory = tree.xpath('//div[@class="cplb-3n-ts-03 b"]/h3/span/text()')
    print("產(chǎn)品分類:" + catgory[0])
    # 該分類下產(chǎn)品url
    urls = tree.xpath('//div[@class="cplb-3n-ts-03-list"]/dl/dt/a/@href')
    # 處理url
    for url in urls:
      url = 'http://www.kexinjianji.com' + url
      print(url)
    print("=====================================================")

2.2使用xpath解析函數(shù)返回產(chǎn)品鏈接的內(nèi)容

if __name__ == '__main__':
  content = get_one_page(url)
  tree = etree.HTML(content)
  # 產(chǎn)品名稱
  title = tree.xpath('//*[@id="wrap"]//h1/text()')
  images = tree.xpath('//div[@class="sol_tj_left"]/a/img/@src')
  # 產(chǎn)品圖片
  images_url = 'http://www.kexinjianji.com/' + images[0]
  # 性能特點(diǎn)
  xntd = tree.xpath('//div[@class="w"]//div/span/text()|//div[@class="w"]//div/text()')
  # 技術(shù)參數(shù)
  jscs = tree.xpath('//table')[0]
  jscs_str = etree.tostring(jscs, encoding='utf-8').decode('utf-8')
  # 產(chǎn)品內(nèi)容
  cpnr = tree.xpath('//div[@class="describe"]/p')
  print('產(chǎn)品名稱:' + title[0])
  print('產(chǎn)品圖片:' + images_url)
  for td in xntd:
    print('性能特點(diǎn):' + td)
  print('技術(shù)參數(shù):' + jscs_str)
  for cp in cpnr:
    # string(.) 獲取當(dāng)前標(biāo)簽下所有文本內(nèi)容
    cp = cp.xpath('string(.)')
    print('產(chǎn)品內(nèi)容:' + cp)
  print('============================================')

將三者結(jié)合在一起就可以獲取所有產(chǎn)品信息

if __name__ == '__main__':
  content = get_one_page(url)
  tree = etree.HTML(content)
  # 產(chǎn)品分類url
  catgory_urls = tree.xpath('//div[@class="fdh-01-nav"]/div/h3/a/@href')
  # 處理catgory_urls
  for url in catgory_urls:
    url = 'http://www.kexinjianji.com' + url
    content = get_one_page(url)
    tree = etree.HTML(content)
    # 產(chǎn)品分類
    catgory = tree.xpath('//div[@class="cplb-3n-ts-03 b"]/h3/span/text()')
    # 該分類下產(chǎn)品url
    urls = tree.xpath('//div[@class="cplb-3n-ts-03-list"]/dl/dt/a/@href')
    # 處理url
    for url in urls:
      url = 'http://www.kexinjianji.com' + url
      content = get_one_page(url)
      try:
        tree = etree.HTML(content)
        # 產(chǎn)品名稱
        title = tree.xpath('//*[@id="wrap"]//h1/text()')
        images = tree.xpath('//div[@class="sol_tj_left"]/a/img/@src')
        # 產(chǎn)品圖片
        images_url = 'http://www.kexinjianji.com' + images[0]
        # 性能特點(diǎn)
        xntd = tree.xpath('//div[@class="w"]//div/span/text()|//div[@class="w"]//div/text()')
        # 技術(shù)參數(shù)
        jscs = tree.xpath('//table')[0]
        jscs_str = etree.tostring(jscs, encoding='utf-8').decode('utf-8')
        # 產(chǎn)品內(nèi)容
        cpnr = tree.xpath('//div[@class="describe"]/p')
        print("產(chǎn)品分類:" + catgory[0])
        print('產(chǎn)品鏈接:' + url)
        print('產(chǎn)品名稱:' + title[0])
        print('產(chǎn)品圖片:' + images_url)
        for td in xntd:
          print('性能特點(diǎn):' + td.strip())
        # print('技術(shù)參數(shù):' + jscs_str)
        for cp in cpnr:
          # string(.) 獲取當(dāng)前標(biāo)簽下所有文本內(nèi)容
          cp = cp.xpath('string(.)')
          print('產(chǎn)品內(nèi)容:' + cp)
        print('============================================')
      except Exception as e:
        print(e)
        print('出錯url:' + url)
        pass

3.存儲到django模型

import requests
from lxml.html import etree
import os
import django
import uuid
from django.core.files.base import ContentFile

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jiaobanzhan.settings")
django.setup()

from products.models import ProductBody, ProductsCategory, Product, ProductAdvantage

url = 'http://www.kexinjianji.com/product/hzshntjbz_1/'


def get_one_page(url):
  try:
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    res = requests.get(url=url, headers=headers, timeout=10)
    res.encoding = 'utf-8'
    if res.status_code == 200:
      return res.text
    else:
      return None
  except Exception:
    print('aa')
    return None


if __name__ == '__main__':
  content = get_one_page(url)
  tree = etree.HTML(content)
  # 產(chǎn)品分類url
  catgory_urls = tree.xpath('//div[@class="fdh-01-nav"]/div/h3/a/@href')
  # 處理catgory_urls
  for url in catgory_urls:
    url = 'http://www.kexinjianji.com' + url
    content = get_one_page(url)
    tree = etree.HTML(content)
    # 產(chǎn)品分類
    p_catgory = tree.xpath('//div[@class="cplb-3n-ts-03 b"]/h3/span/text()')
    # 該分類下產(chǎn)品url
    urls = tree.xpath('//div[@class="cplb-3n-ts-03-list"]/dl/dt/a/@href')
    # 處理url
    for url in urls:
      url = 'http://www.kexinjianji.com' + url
      content = get_one_page(url)
      try:
        tree = etree.HTML(content)
        # 產(chǎn)品名稱
        title = tree.xpath('//*[@id="wrap"]//h1/text()')
        images = tree.xpath('//div[@class="sol_tj_left"]/a/img/@src')
        # 產(chǎn)品圖片
        images_url = 'http://www.kexinjianji.com' + images[0]
        # 性能特點(diǎn)
        xntd = tree.xpath('//div[@class="w"]//div/span/text()|//div[@class="w"]//div/text()')
        # 技術(shù)參數(shù)
        jscs = tree.xpath('//table')[0]
        jscs_str = etree.tostring(jscs, encoding='utf-8').decode('utf-8')
        # 產(chǎn)品內(nèi)容
        cpnr = tree.xpath('//div[@class="describe"]/p')
        # 判斷是否有這分類,沒有則新建
        catgory = p_catgory[0]
        products_catgory = ProductsCategory.objects.filter(name=catgory).exists()
        if products_catgory:
          products_catgory = ProductsCategory.objects.get(name=catgory)
        else:
          products_catgory = ProductsCategory(name=catgory)
          products_catgory.save()
        print(products_catgory)

        # 保存產(chǎn)品圖片
        image_content = requests.get(url=images_url)
        ext = images_url.split('.')[-1] # 獲取圖片類型
        filename = '{}.{}'.format(uuid.uuid4().hex[:8], ext) # 隨機(jī)生成圖片名字
        upload_image_file = ContentFile(image_content.content, name=filename) # 將圖片保存為django類型
        product = Product(title=title[0], jscs=jscs_str, image=upload_image_file, category=products_catgory)
        product.save()
        for td in xntd:
          product_advantage = ProductAdvantage()
          product_advantage.content = td
          product_advantage.product = product
          product_advantage.save()
        for cp in cpnr:
          cp = cp.xpath('string(.)')
          product_body = ProductBody()
          product_body.body = cp
          product_body.product = product
          product_body.save()
      except Exception as e:
        print(e)
        print('出錯url:' + url)

最后自己手動處理出錯url(頁面沒有獲取到技術(shù)參數(shù),技術(shù)參數(shù)是一張圖片)

4.總結(jié)

1.xpath 獲取標(biāo)簽內(nèi)容時,p標(biāo)簽中嵌套span標(biāo)簽,源碼如下

div class="describe" style="position: relative;"> 
   p>span>板  寬:/span>1500mm/p> 
   p>span>板  厚:/span>4.5 mm/p> 
   p>span>出料口:/span>6口/p> 
   p>span>重  量:/span>6000 kg/p>
/div>

使用xpath獲取p標(biāo)簽內(nèi)容
我想得到的效果如下
板 寬:1500mm
板 厚:4.5 mm
出料口:6口
重 量:6000 kg
使用以下xpath 只能分開獲取,不是想要的效果

//div[@class="describe"]/p/span/text()|//div[@class="describe"]/p/text()

百度之后找到的解決辦法,使用xpath(‘string(.)')
1.先獲取所有p標(biāo)簽

cpnr = tree.xpath('//div[@class="describe"]/p')

2.使用**string(.)**獲取所有標(biāo)簽所有文本

cp = cp.xpath('string(.)')

循環(huán)遍歷所有p標(biāo)簽即可

到此這篇關(guān)于python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中的文章就介紹到這了,更多相關(guān)xpath爬取網(wǎng)上數(shù)據(jù)存儲到django模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • django模型查詢操作的實(shí)現(xiàn)
  • Django數(shù)據(jù)模型中on_delete使用詳解
  • Django Admin后臺模型列表頁面如何添加自定義操作按鈕
  • Django模型驗(yàn)證器介紹與源碼分析
  • Django3中的自定義用戶模型實(shí)例詳解
  • Django CBV模型源碼運(yùn)行流程詳解
  • Python Django模型詳解

標(biāo)簽:阜新 合肥 興安盟 淘寶好評回訪 信陽 昭通 隨州 濟(jì)源

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中》,本文關(guān)鍵詞  python,利用,xpath,爬取,網(wǎng)上,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中》相關(guān)的同類信息!
  • 本頁收集關(guān)于python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲到django模型中的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美丝袜第三区| 极品少妇xxxx精品少妇偷拍| 国产精品2024| 亚洲永久精品大片| 日韩精品专区在线影院重磅| 国产成a人亚洲精品| 亚洲va韩国va欧美va| 久久欧美中文字幕| 日韩精品一区二区三区四区| 国产一区二区看久久| 五月婷婷激情综合| 一级做a爱片久久| 国产日韩欧美在线一区| 一区二区三区欧美视频| www.激情成人| 激情五月婷婷综合| 久久亚洲精品国产精品紫薇| 在线视频国内自拍亚洲视频| av在线不卡免费看| proumb性欧美在线观看| 粗大黑人巨茎大战欧美成人| 国产白丝网站精品污在线入口| 亚洲日本在线天堂| 亚洲一区二区在线视频| 亚洲欧美另类在线| 亚洲午夜精品一区二区三区他趣| 亚洲国产日韩a在线播放性色| 国产精品美女久久久久aⅴ国产馆| 中文字幕av不卡| 国产三级欧美三级| 亚洲精品国产第一综合99久久| 国产精品久久久久久亚洲毛片 | 国产又粗又猛又爽又黄91精品| 麻豆国产91在线播放| 国产精品久久久久一区| 自拍偷拍国产亚洲| 亚洲一区二区三区四区五区黄| 一区2区3区在线看| 成人精品视频一区| 欧美日韩国产色站一区二区三区| 91麻豆精品国产91久久久久久久久 | 欧美日韩一区在线观看| 成人黄色片在线观看| 成人免费av资源| 97精品视频在线观看自产线路二| 欧美日韩亚洲综合一区| 国产精品视频一区二区三区不卡| 一区二区在线看| 国产一区二区女| 色成年激情久久综合| 26uuu亚洲| 亚洲一区二区三区三| 成人免费视频视频| 在线免费不卡视频| 中文字幕一区二区三| 日本视频一区二区三区| 91久久线看在观草草青青| 欧美精品一区二区三区一线天视频 | 国产suv一区二区三区88区| 精品视频1区2区3区| 日韩理论在线观看| 国产精品99久久久久久有的能看| 欧美午夜片在线观看| 国产精品卡一卡二| 久草中文综合在线| 欧美一级电影网站| 中文字幕乱码久久午夜不卡| 97国产一区二区| 国产乱人伦精品一区二区在线观看 | 国产成人在线观看免费网站| 日本在线不卡视频一二三区| 欧美日韩一区二区三区四区五区| 久久er99热精品一区二区| 午夜精品久久久久久久久| 国产精品麻豆网站| 国产女主播一区| 日本女人一区二区三区| 精品一区二区三区在线播放视频| 日韩一区二区在线观看视频| 国产乱子伦一区二区三区国色天香| 国产日韩欧美精品在线| 99久久精品免费观看| 亚洲大片免费看| 久久精品一区二区| 91精品国产欧美日韩| 95精品视频在线| 韩国女主播一区二区三区| 一区二区激情视频| 欧美mv日韩mv| 欧美精品一卡两卡| 91精品福利在线| 韩国中文字幕2020精品| 日韩国产精品久久久久久亚洲| 一区二区三区欧美视频| 国产精品久久久久久久久动漫| 日韩欧美国产小视频| 91麻豆精品国产91久久久更新时间| 成人av网址在线| 福利91精品一区二区三区| 免费在线看成人av| 久久精品国产精品青草| 国内欧美视频一区二区| 国产一区二区在线影院| 精品一区二区三区av| 久久精品理论片| 亚洲一区二区三区四区的| 有坂深雪av一区二区精品| 精品区一区二区| 一区二区三区欧美久久| 久久免费电影网| 99国产精品久久久久久久久久 | 91麻豆精品国产| 亚洲欧美另类图片小说| 国产乱码字幕精品高清av | 亚洲福利视频导航| 99re在线精品| 亚洲欧洲成人自拍| 国产美女久久久久| 亚洲小说欧美激情另类| 亚洲黄色小说网站| 欧美精品在线一区二区| 精品一区二区国语对白| 色播五月激情综合网| 亚洲一区二区偷拍精品| 麻豆一区二区三| 91麻豆精品91久久久久同性| 国产91清纯白嫩初高中在线观看| 一区二区在线免费观看| 国产盗摄视频一区二区三区| 午夜婷婷国产麻豆精品| 午夜精品影院在线观看| 日韩免费观看2025年上映的电影| 国产sm精品调教视频网站| 麻豆国产欧美日韩综合精品二区| 麻豆国产欧美一区二区三区| 成人v精品蜜桃久久一区| 欧美日韩在线播放一区| 精品视频一区三区九区| 91久久精品午夜一区二区| 国产日韩综合av| 极品销魂美女一区二区三区| 欧美日韩精品三区| 国产精品美女视频| 福利一区在线观看| 久久精品人人做人人爽97| 久久精品噜噜噜成人av农村| bt欧美亚洲午夜电影天堂| 国产性天天综合网| 国产精品99久| 粉嫩一区二区三区在线看| 91麻豆免费看片| 国产欧美一区二区三区网站| 国产精一区二区三区| 中文字幕的久久| 欧美视频一区二区三区| 日韩高清在线电影| 欧美另类videos死尸| 裸体歌舞表演一区二区| 欧美大片顶级少妇| 成人国产在线观看| 性感美女久久精品| 国产女人18毛片水真多成人如厕| 国产精品123| 青青草视频一区| 亚洲欧美日韩国产综合在线 | 亚洲美女淫视频| 欧美一个色资源| 另类的小说在线视频另类成人小视频在线| 欧美成人精品1314www| 国内精品写真在线观看| 亚洲国产三级在线| 欧美第一区第二区| 欧美精品自拍偷拍| 9i在线看片成人免费| 蜜臀av在线播放一区二区三区| 亚洲黄色av一区| 日韩影视精彩在线| 美女视频黄久久| 国产精品综合视频| 成人网在线播放| 欧美日韩激情在线| 欧美日韩不卡在线| 欧美三级电影网| 国产**成人网毛片九色| 亚洲精品成人少妇| 亚洲高清免费在线| 久久精品国产在热久久| 成人av在线看| 欧美性大战久久久久久久 | 美女脱光内衣内裤视频久久网站| 激情国产一区二区| 色婷婷久久综合| 欧美在线观看18| 日韩一级黄色片| 亚洲欧洲成人精品av97| 一区二区欧美精品| 成人激情图片网| 日韩限制级电影在线观看| 国产精品伦一区二区三级视频| 午夜精品一区二区三区三上悠亚 |