最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)爬取圖書封面

 更新時間:2018年07月05日 11:44:48   作者:萌妹子哦哦  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)爬取圖書封面的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python實(shí)現(xiàn)爬取圖書封面的具體代碼,供大家參考,具體內(nèi)容如下

kongfuzi.py

利用更換代理ip,延遲提交數(shù)據(jù),設(shè)置請求頭破解網(wǎng)站的反爬蟲機(jī)制

import requests
import random
import time
 
 
class DownLoad():
  def __init__(self):
    self.ip_list = ['191.33.179.242:8080', '122.72.108.53:80', '93.190.142.214:80', '189.8.88.125:65301',
            '36.66.55.181:8080', '170.84.102.5:8080', '177.200.72.214:20183', '115.229.115.190:9000']
 
    self.user_agent_list = [
      'User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
      'User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
      'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'
    ]
 
  def get(self, url, proxy=None, timeout=20, num=5):
    print("正在請求%s" % url)
    UA = random.choice(self.user_agent_list)
    headers = {'User-Agent': UA}
 
    if proxy == None:
      try:
        return requests.get(url, headers=headers, timeout=timeout)
      except:
        if num > 0:
          time.sleep(10)
          return self.get(url, num=num - 1)
        else:
          time.sleep(10)
          IP = ''.join(random.choice(self.ip_list).strip())
          proxy = {'http': IP}
          return self.get(url, proxy=proxy, timeout=timeout)
    else:
      try:
        IP = ''.join(random.choice(self.ip_list).strip())
        proxy = {'http': IP}
        return requests.get(url, headers=headers, proxy=proxy, timeout=timeout)
      except:
        if num > 0:
          time.sleep(10)
          IP = ''.join(random.choice(self.ip_list).strip())
          proxy = {'http': IP}
          print("正在更換代理")
          print("當(dāng)前代理%s" % proxy)
          return self.get(url, proxy=proxy, num=num - 1)

main.py

將爬取的圖片保存到本地,然后展示到界面

import kongfuzi
import os
import requests
import bs4
from tkinter import *
from PIL import Image, ImageTk
 
 
# 下載圖片,生成圖片地址列表和圖書信息列表
def download():
  baseUrl = "http://search.kongfz.com"
  keyword = e1.get()
  url = baseUrl + "/product_result/?select=0&key=" + keyword
  print("下載鏈接:" + url)
  show(url)
 
 
# bs4處理
def changesoup(html):
  htm = html.content
  html_doc = str(htm, 'utf-8')
  soup = bs4.BeautifulSoup(html_doc, "html.parser")
  return soup
 
 
# 圖書信息集合
def bookinfo(soup):
  # 圖書價格列表
  price = []
  soupprice = soup.select(".first-info .f_right .bold")
  for i in soupprice:
    price.append(i.string)
 
  # 書店名列表
  storename = []
  soupstorename = soup.select(".text a span")
  for each in soupstorename:
    if each.string == None:
      soupstorename.remove(each)
  for i in soupstorename:
    storename.append(i.string)
 
  # 商家地區(qū)列表
  place = []
  soupplace = soup.select(".user-place")
  for i in soupplace:
    place.append(i.string)
 
  # 書名列表
  bookname = []
  bookname1 = soup.select(
    ".search-wrap .search-main .search-main-result .result-content .result-list .item .item-info .title .link")
  # print(len(bookname1))
  # print(bookname1)
  for each in bookname1:
    print(each)
    # a = bs4.BeautifulSoup(each, "html.parser")
    a = each.get_text()
    print(a)
    # type(a)
    # a = bs4.BeautifulSoup(a, "html.parser")
    # b = a.get_text()
    bookname.append(a)
  # print(bookname)
  # print(len(bookname))
 
  return bookname, price, place, storename
 
 
# 保存圖片
def imgsave(soup):
  dirName = "image"
  os.makedirs(dirName, exist_ok=True)
  filePathList = []
  imgUrl = soup.select(".search-main-result .result-content .result-list .item .item-img .img-box img")
 
  # print(imgUrl)
  if not imgUrl:
    print("沒有找到當(dāng)前節(jié)點(diǎn)下圖片")
  else:
    i = 0
    for imageUrls in imgUrl:
      # 找到圖片地址 獲取它
      downloadUrl = imageUrls.get('src')
      # if downloadUrl == "/searchfront/img/error.jpg":
      #   downloadUrl = "http://book.kongfz.com/img/pc/error.jpg"
      print("打印要下載的圖片地址:", downloadUrl)
      #   http://book.kongfz.com/img/pc/error.jpg
      # 分割字符
      split = downloadUrl.split("/")
      # 只保留最后一個元素
      fileName = str(i) + "-" + os.path.basename(split[len(split) - 1])
      print("文件名:" + fileName)
      # 建立一個新路徑
      filePath = os.path.join(dirName, fileName)
      filePathList.append(filePath)
      if not os.path.exists(filePath):
        imageUrlPath = requests.get(downloadUrl)
        # 檢查當(dāng)前網(wǎng)絡(luò)是否請求成功
        imageUrlPath.raise_for_status()
        # 'wb'二進(jìn)制模式打開img適用
        imageFile = open(filePath, 'wb')
        for image in imageUrlPath.iter_content(10000):
          # 把每次遍歷的文件圖像都存儲進(jìn)文件夾中
          imageFile.write(image)
        # 關(guān)閉文件
        imageFile.close()
      i = i + 1
  return filePathList
 
# 圖片展示
def show(url):
  xz = kongfuzi.DownLoad()
  html = xz.get(url)
 
  # 添加代理ip到ip_list
  add_ip = e2.get()
  xz.ip_list.append(add_ip)
 
  soup = changesoup(html)
  bookname, price, place, storename = bookinfo(soup)
  # print(bookname)
  # print(price)
  # print(place)
  # print(storename)
  filePathList = imgsave(soup)
  root1 = Toplevel()
  root1.geometry("1720x800")
  root1.title("孔網(wǎng)圖片爬取")
 
  # 處理圖片,轉(zhuǎn)換成可以顯示
  photo = []
  temp = []
  for each in filePathList:
    temp = Image.open(each)
    photo.append(ImageTk.PhotoImage(temp))
 
  canvas = Canvas(root1, width=1700, height=800, scrollregion=(0, 0, 0, 4000)) # 創(chuàng)建canvas
  canvas.place(x=10, y=10) # 放置canvas的位置
 
  frame = Frame(canvas) # 把frame放在canvas里
  frame.place(width=1680, height=800)
 
  for i in range(50):
    # 圖片行列
    rownum = int(i / 5)
    columnnum = i % 5
 
    # photo = ImageTk.PhotoImage(Image.open(filePathList[i]))
    imgLabel1 = Label(frame, image=photo[i], width=280, height=280)
    imgLabel1.grid(row=rownum * 5, column=columnnum, padx=10, pady=5)
 
    infoLabel1 = Label(frame, text="書名:" + bookname[i], bg="#FFF8DC", justify=LEFT)
    infoLabel1.grid(row=rownum * 5 + 1, column=columnnum, padx=45, pady=2, sticky=W)
    infoLabel2 = Label(frame, text="價格:" + price[i] + "元", bg="#FFF8DC", justify=LEFT)
    infoLabel2.grid(row=rownum * 5 + 2, column=columnnum, padx=45, pady=2, sticky=W)
    infoLabel3 = Label(frame, text="發(fā)貨地區(qū):" + place[i], bg="#FFF8DC", justify=LEFT)
    infoLabel3.grid(row=rownum * 5 + 3, column=columnnum, padx=45, pady=2, sticky=W)
    infoLabel4 = Label(frame, text="書店:" + storename[i], bg="#FFF8DC", justify=LEFT)
    infoLabel4.grid(row=rownum * 5 + 4, column=columnnum, padx=45, pady=2, sticky=W)
 
  vbar = Scrollbar(canvas, orient=VERTICAL) # 豎直滾動條
  vbar.place(x=1680, width=20, height=800)
  vbar.configure(command=canvas.yview)
  canvas.config(yscrollcommand=vbar.set) # 設(shè)置
  canvas.create_window((800, 2000), window=frame)
 
  mainloop()
 
 
if __name__ == '__main__':
  # 界面
  root = Tk()
  root.title("孔網(wǎng)圖片爬取")
  e1 = Entry(root)
  e2 = Entry(root)
  e1.grid(row=0, column=0, padx=20, pady=20)
  e2.grid(row=0, column=2, padx=20, pady=20)
  label1 = Label(root, text="關(guān)鍵字", width=10).grid(row=0, column=1, padx=10, pady=5)
  label2 = Label(root, text="添加代理ip", width=10).grid(row=0, column=3, padx=10, pady=5)
  btn1 = Button(root, text="搜索", width=10, command=download).grid(row=1, column=1, padx=10, pady=5)
  # print(e1.get())
  mainloop()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中set()函數(shù)簡介及實(shí)例解析

    python中set()函數(shù)簡介及實(shí)例解析

    這篇文章主要介紹了python中set()函數(shù)簡介及實(shí)例解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • pygame畫點(diǎn)線方法詳解

    pygame畫點(diǎn)線方法詳解

    這篇文章主要介紹了pygame畫點(diǎn)線的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • 使用python快速實(shí)現(xiàn)不同機(jī)器間文件夾共享方式

    使用python快速實(shí)現(xiàn)不同機(jī)器間文件夾共享方式

    今天小編就為大家分享一篇使用python快速實(shí)現(xiàn)不同機(jī)器間文件夾共享方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 將Django項(xiàng)目部署到CentOs服務(wù)器中

    將Django項(xiàng)目部署到CentOs服務(wù)器中

    今天小編就為大家分享一篇關(guān)于將Django項(xiàng)目部署到CentOs服務(wù)器中的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • python獲取全國最新省市區(qū)數(shù)據(jù)并存入表實(shí)例代碼

    python獲取全國最新省市區(qū)數(shù)據(jù)并存入表實(shí)例代碼

    我們在開發(fā)中經(jīng)常會遇到獲取省市區(qū)等信息的時候,下面這篇這篇文章主要給大家介紹了關(guān)于python獲取全國最新省市區(qū)數(shù)據(jù)并存入表的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python中執(zhí)行smtplib失敗的處理方法

    python中執(zhí)行smtplib失敗的處理方法

    在本篇文章里小編給大家整理了關(guān)于python中執(zhí)行smtplib失敗的處理方法,對此有需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • PowerBI和Python關(guān)于數(shù)據(jù)分析的對比

    PowerBI和Python關(guān)于數(shù)據(jù)分析的對比

    這篇文章主要介紹了PowerBI和Python關(guān)于數(shù)據(jù)分析的對比,很多經(jīng)常會用到數(shù)據(jù)分析的伙伴會問有沒有一款便捷好用的工具!肯定有啊,Python的出現(xiàn)和普及,很容易就能改變這些窘境,需要的朋友可以參考下
    2019-07-07
  • Pycharm 常用插件推薦小結(jié)

    Pycharm 常用插件推薦小結(jié)

    本文主要介紹了Pycharm 常用插件推薦小結(jié),包含KeyPromoterX、ideaVim、Markdown、JupyterNotebook等PyCharm插件的功能和安裝方法,幫助提高編程效率和便捷性
    2024-11-11
  • Python 彈窗設(shè)計(jì)小人發(fā)射愛心

    Python 彈窗設(shè)計(jì)小人發(fā)射愛心

    今天小編就為大家分享一篇使用Python畫出小人發(fā)射愛心的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-09-09
  • Python基于滑動平均思想實(shí)現(xiàn)缺失數(shù)據(jù)填充的方法

    Python基于滑動平均思想實(shí)現(xiàn)缺失數(shù)據(jù)填充的方法

    今天小編就為大家分享一篇關(guān)于Python基于滑動平均思想實(shí)現(xiàn)缺失數(shù)據(jù)填充的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

嵊泗县| 河池市| 孟州市| 裕民县| 杂多县| 隆化县| 赣州市| 新田县| 辽宁省| 文昌市| 酒泉市| 奉新县| 隆昌县| 洛浦县| 莱州市| 宜兰市| 垫江县| 柞水县| 巨野县| 清新县| 清丰县| 天气| 延安市| 岢岚县| 张家界市| 建始县| 和政县| 平阴县| 晋宁县| 泸定县| 招远市| 泌阳县| 兖州市| 安多县| 多伦县| 南丰县| 察雅县| 界首市| 荆州市| 仁寿县| 扶余县|