国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 我用Python抓取了7000 多本電子書案例詳解

我用Python抓取了7000 多本電子書案例詳解

2021-06-09 00:12嗨學編程 Python

這篇文章主要介紹了我用Python抓取了7000 多本電子書案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

安裝

安裝很簡單,只要執行:

?
1
pip install requests-html

就可以了。

分析頁面結構

通過瀏覽器審查元素可以發現這個電子書網站是用 wordpress 搭建的,首頁列表元素很簡單,很規整

我用Python抓取了7000 多本電子書案例詳解

所以我們可以查找 .entry-title > a 獲取所有圖書詳情頁的鏈接,接著我們進入詳情頁,來尋找下載鏈接,由下圖

我用Python抓取了7000 多本電子書案例詳解

可以發現 .download-links > a 里的鏈接就是該書的下載鏈接,回到列表頁可以發現該站一共 700 多頁,由此我們便可以循環列表獲取所有的下載鏈接。

requests-html 快速指南

發送一個 get 請求:

?
1
2
3
4
from requests_html import htmlsession
session = htmlsession()
 
r = session.get('https://python.org/')

requests-html 的方便之處就是它解析 html 方式就像使用 jquery 一樣簡單,比如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 獲取頁面的所有鏈接可以這樣寫:
r.html.links
# 會返回 {'//docs.python.org/3/tutorial/', '/about/apps/'}
 
# 獲取頁面的所有的絕對鏈接:
r.html.absolute_links
# 會返回 {'https://github.com/python/pythondotorg/issues', 'https://docs.python.org/3/tutorial/'}
 
# 通過 css 選擇器選擇元素:
about = r.find('.about', first=true)
# 參數 first 表示只獲取找到的第一元素
about.text # 獲取 .about 下的所有文本
about.attrs # 獲取 .about 下所有屬性像 id, src, href 等等
about.html # 獲取 .about 的 html
about.find('a') # 獲取 .about 下的所有 a 標簽

構建代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from requests_html import htmlsession
import requests
import time
import json
import random
import sys
 
'''
想要學習python?python學習交流群:984632579滿足你的需求,資料都已經上傳群文件,可以自行下載!
'''
 
session = htmlsession()
list_url = 'http://www.allitebooks.com/page/'
 
user_agents = [
  "mozilla/5.0 (macintosh; intel mac os x 10_7_3) applewebkit/535.20 (khtml, like gecko) chrome/19.0.1036.7 safari/535.20",
  "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.71 safari/537.1 lbbrowser",
  "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/535.11 (khtml, like gecko) chrome/17.0.963.84 safari/535.11 lbbrowser",
  "mozilla/4.0 (compatible; msie 7.0; windows nt 6.1; wow64; trident/5.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; .net4.0c; .net4.0e)",
  "mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
  "mozilla/4.0 (compatible; msie 7.0; windows nt 5.1; trident/4.0; sv1; qqdownload 732; .net4.0c; .net4.0e; 360se)",
  "mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; sv1; qqdownload 732; .net4.0c; .net4.0e)",
  "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.1 (khtml, like gecko) chrome/21.0.1180.89 safari/537.1",
  "mozilla/5.0 (ipad; u; cpu os 4_2_1 like mac os x; zh-cn) applewebkit/533.17.9 (khtml, like gecko) version/5.0.2 mobile/8c148 safari/6533.18.5",
  "mozilla/5.0 (windows nt 6.1; win64; x64; rv:2.0b13pre) gecko/20110307 firefox/4.0b13pre",
  "mozilla/5.0 (x11; ubuntu; linux x86_64; rv:16.0) gecko/20100101 firefox/16.0",
  "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.11 (khtml, like gecko) chrome/23.0.1271.64 safari/537.11",
  "mozilla/5.0 (x11; u; linux x86_64; zh-cn; rv:1.9.2.10) gecko/20100922 ubuntu/10.10 (maverick) firefox/3.6.10"
]
 
# 獲取當前列表頁所有圖書鏈接
def get_list(url):
  response = session.get(url)
  all_link = response.html.find('.entry-title a') # 獲取頁面所有圖書詳情鏈接
  for link in all_link:
    getbookurl(link.attrs['href'])
 
# 獲取圖書下載鏈接
def getbookurl(url):
  response = session.get(url)
  l = response.html.find('.download-links a', first=true)
  if l is not none: # 運行后發現有的個別頁面沒有下載鏈接,這里加個判斷
    link = l.attrs['href'];
    download(link)
 
#下載圖書
def download(url):
  # 隨機瀏覽器 user-agent
  headers={ "user-agent":random.choice(user_agents) }
  # 獲取文件名
  filename = url.split('/')[-1]
  # 如果 url 里包含 .pdf
  if ".pdf" in url:
    file = 'book/'+filename # 文件路徑寫死了,運行時當前目錄必須有名 book 的文件夾
    with open(file, 'wb') as f:
      print("正在下載 %s" % filename)
      response = requests.get(url, stream=true, headers=headers)
      
      # 獲取文件大小
      total_length = response.headers.get('content-length')
      # 如果文件大小不存在,則直接寫入返回的文本
      if total_length is none:
        f.write(response.content)
      else:
        # 下載進度條
        dl = 0
        total_length = int(total_length) # 文件大小
        for data in response.iter_content(chunk_size=4096): # 每次響應獲取 4096 字節
          dl += len(data)
          f.write(data)
          done = int(50 * dl / total_length)
          sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) ) # 打印進度條 
          sys.stdout.flush()
 
      print(filename + '下載完成!')
 
if __name__ == '__main__':
  #從這運行,應為知道列表總數,所以偷個懶直接開始循環
  for x in range(1,756):
    print('當前頁面: '+ str(x))
    get_list(list_url+str(x))

運行效果:

我用Python抓取了7000 多本電子書案例詳解

以上所述是小編給大家介紹的我用python抓取了7000 多本電子書案例詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://blog.csdn.net/fei347795790/article/details/88541128

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久午夜综合久久 | 国产福利在线播放 | 国产精品国产a | 亚洲视频在线观看免费 | 成人日韩在线观看 | 99成人在线 | 国语av在线| 97在线观看视频 | 亚洲 综合 清纯 丝袜 自拍 | 亚洲精品久久久久久久久久久久久 | 欧美一区免费 | 香蕉大人久久国产成人av | 日本精品一区二 | 4虎tv | 99热首页| 中文字幕一区二区三 | 国产精品久久久久久久久小说 | 亚洲精品一区在线 | 视频在线一区二区 | 黄色片视频在线观看 | 在线中文视频 | 国产成人一区二区 | 亚洲精品一区二区三区蜜桃久 | 亚洲国产精品久久久 | 欧美疯狂性受xxxxx另类 | 欧美日韩亚洲一区二区 | 国产精品久久久91 | 91在线中文 | 精品免费视频 | 久久久久久久av | 国产精品久久久久久久久久东京 | 黄色一级毛片在线观看 | 欧美日韩精品在线 | 国产羞羞视频在线观看 | 日韩欧美精品在线 | 久久国产精品久久喷水 | 亚洲一区二区中文字幕 | 成人免费大片黄在线播放 | 91精品国产综合久久香蕉最新版 | 欧美成人二区 | 91香蕉 |