最多見的Markdown格式選項和鍵盤快捷鍵 [3] :html
輸出後的效果 | Markdown | 快捷鍵 |
---|---|---|
Bold | text | Ctrl/⌘ + B |
Emphasize | text | Ctrl/⌘ + I |
Link | title | Ctrl/⌘ + K |
Inline Code | code |
Ctrl/⌘ + Shift + K |
Image | Ctrl/⌘ + Shift + I | |
List | * item | Ctrl + L |
Blockquote | > quote | Ctrl + Q |
H1 | # Heading | |
H2 | ## Heading | Ctrl/⌘ + H |
H3 | ### Heading | Ctrl/⌘ + H (x2) |
標題能顯示出文章的結構。行首插入1-6個 # ,每增長一個 # 表示更深刻層次的內容,對應到標題的深度由 1-6 階。web
H1 :# Header 1json
H2 :## Header 2瀏覽器
H3 :### Header 3markdown
H4 :#### Header 4網絡
H5 :##### Header 5app
H6 :###### Header 6編輯器
(帶「*」星號的文本樣式,在原版Markdown標準中不存在,但在其大部分衍生標準中被添加)工具
連接 :Titlepost
加粗 :*Bold*
斜體字 :*Italics*
*高亮 :==text==
段落 : 段落之間空一行
換行符 : 一行結束時輸入兩個空格
列表 :* 添加星號成爲一個新的列表項。
引用 :> 引用內容
內嵌代碼 : alert('Hello World');
畫水平線 (HR) :--------
方框:- [ ] -
使用Markdown將圖像插入文章,你須要在Markdown編輯器輸入 。 這時在預覽面板中會自動建立一個圖像上傳框。你能夠從電腦桌面拖放圖片(.png, .gif, .jpg)到上傳框, 或者點擊圖片上傳框使用標準的圖像上傳方式。 若是你想經過連接插入網絡上已經存在的圖片,只要單擊圖片上傳框的左下角的「連接」圖標,這時就會呈現圖像URL的輸入框。想給圖片添加一個標題, 你須要作的是將標題文本插圖中的方括號,e.g;.
腳註不存在於標準Markdown中。
使用這樣的佔位符號能夠將腳註添加到文本中:1. 另外,你可使用「n」而不是數字的n因此你能夠沒必要擔憂使用哪一個號碼。在您的文章的結尾,你能夠以下圖所示定義匹配的註腳,URL將變成連接:
`這裏是腳註[^1]``[^1]: 這裏是腳註的內容` `這裏是腳註[^n]``[^n]: 這裏是腳註的內容`
添加內嵌代碼可使用一對回勾號 alert('Hello World')
.對於插入代碼, Ghost支持標準的Markdown代碼和GitHub Flavored Markdown (GFM) [4] 。標準Markdown基於縮進代碼行或者4個空格位:
` ``<``header``> `` ``<``h1``>{{title}}</``h1``>`` ``</``header``>`
GFM 使用三個回勾號```
`´´´``<``header``>`` ``<``h1``>{{title}}</``h1``>``</``header``>`
用'-'和縮進控制
注:須要anaconda 集成環境
Shift+Enter : 運行本單元,選中下個單元 Ctrl+Enter : 運行本單元 Alt+Enter : 運行本單元,在其下插入新單元 shift+tab : 打開幫助文檔 Y:單元轉入代碼狀態 M:單元轉入markdown狀態 A :在上方插入新單元 B:在下方插入新單元 X:剪切選中的單元 Shift +V:在上方粘貼單元
選擇 jupyter
默認瀏覽器會直接啓動(或輸入jupyter notebook 啓動)
獲得可視化工具頁面
注:等號前要有空格
經過編寫程序,模擬瀏覽器上網,讓其去互聯網上爬取數據的過程
- 通用爬蟲 :經常使用於搜索引擎中 - 聚焦爬蟲 :爬取局部數據 - 增量式 :只爬取最新的內容
robots.txt協議:第一個反爬機制,一個網站約束了什麼數據可爬,什麼數據不可爬
選擇tools中的options
https配置
重啓fiddler
請求頭信息
當前請求所攜帶的參數
響應頭信息
響應的json數據
向右箭頭表明post請求,向左表明get請求
User-Agent:請求載體的身份標識 Connection:close/keep alive #鏈接的狀態
Content-Type:告訴瀏覽器返回的數據類型
1.指定url 2.發起請求 3.獲取相應對象中的數據 4.持久化存儲
import requests url='https://www.sogou.com/web' content=input("請輸入搜索內容:") params={ "query":content } #指定url,發起請求 response=requests.get(url=url,params=params).text#獲取相應對象中的數據 with #持久化存儲open('./sogou.html','w',encoding='utf-8') as f: f.write(response) print("爬取完成!!!") 注:不一樣參數的數據格式 .txt #以字符串形式存儲 .content #存儲二進制數據 .json() #獲取json字符串
import requests url='https://fanyi.baidu.com/sug' content=input("請輸入翻譯內容:") params={ "kw": content } response=requests.get(url=url,params=params).json() print(response) print("爬取完成!!!") #結果 請輸入翻譯內容:美少女 {'errno': 0, 'data': [{'k': '美少女', 'v': 'beautiful young girl;nymph;'}, {'k': '美少女戰士', 'v': 'Sailor Moon;'}]} 爬取完成!!!
import requests url='https://movie.douban.com/j/chart/top_list' params={ "type": "5", "interval_id": "100:90", "action":"", "start": "1", "limit": "100" } response=requests.get(url=url,params=params).json() print(response) print("爬取完成!!!")
import requests url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' content=input("請輸入要查詢的地址:") params={ "cname": "", "pid": "", "keyword": content, "pageIndex": "1", "pageSize": "10", } response=requests.get(url=url,params=params).json() print(response) #結果 #請輸入要查詢的地址:北京 {'Table': [{'rowcount': 69}], 'Table1': [{'rownum': 1, 'storeName': '育慧裏', 'addressDetail': '小營東路3號北京凱基倫購物中心一層西側', 'pro': 'Wi-Fi,店內參觀,禮品卡', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 2, 'storeName': '京通新城', 'addressDetail': '朝陽路楊閘環島西北京通苑30號樓一層南側', 'pro': 'Wi-Fi,店內參觀,禮品卡,生日餐會', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 3, 'storeName': '黃寺大街', 'addressDetail': '黃寺大街15號北京城鄉黃寺商廈', 'pro': 'Wi-Fi,店內參觀,禮品卡,生日餐會', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 4, 'storeName': '四季青橋', 'addressDetail': '西四環北路117號北京歐尚超市F一、B1', 'pro': 'Wi-Fi,店內參觀,禮品卡,生日餐會', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 5, 'storeName': '亦莊', 'addressDetail': '北京經濟開發區西環北路18號F1+F2', 'pro': 'Wi-Fi,店內參觀,禮品卡,生日餐會', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 6, 'storeName': '石園南大街', 'addressDetail': '通順路石園西區南側北京順義西單商場石園分店一層、二層部分', 'pro': 'Wi-Fi,店內參觀,禮品卡', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 7, 'storeName': '北京站廣場', 'addressDetail': '北京站一層', 'pro': '禮品卡', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 8, 'storeName': '北京南站', 'addressDetail': '北京南站候車大廳B島201號', 'pro': '禮品卡', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 9, 'storeName': '北清路', 'addressDetail': '北京北清路1號146區', 'pro': 'Wi-Fi,店內參觀,禮品卡', 'provinceName': '北京市', 'cityName': '北京市'}, {'rownum': 10, 'storeName': '大紅門新世紀肯德基餐廳', 'addressDetail': '海戶屯北京新世紀服裝商貿城一層南側', 'pro': 'Wi-Fi,店內參觀,禮品卡', 'provinceName': '北京市', 'cityName': '北京市'}]}
import requests id_list=[] url='http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' headers={ "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36' } page=input("查詢幾頁:") for i in range(1,int(page)+1): params={ "on": "true", "page": i, "pageSize": "15", "productName": "", "conditionType": "1", "applyname": "", "applysn": "", } object_list=requests.post(url=url,params=params,headers=headers).json()["list"] for object in object_list: id_list.append(object["ID"]) for id in id_list: url='http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' params={ "id": id } response=requests.post(url=url,params=params,headers=headers).json() print(response)
注:第二個反爬機制,UA反爬
反爬方式:模擬瀏覽器的useragent
import requests url='https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1695604879,3405317932&fm=26&gp=0.jpg' response=requests.get(url=url).content with open('./meishaonv.jpg','wb') as f: f.write(response) print('爬取完成!!!')
import urllib url='https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1695604879,3405317932&fm=26&gp=0.jpg' urllib.request.urlretrieve(url=url,filename='meishaonv2.jpg')
re.M 多行匹配
import re content=''' sadasf sdgdfg sdgfd tghj ''' re.findall("^s.*",content,re.M) #['sadasf', 'sdgdfg', 'sdgfd']
re.S 總體做爲一行匹配
import re content=''' sadasf sdgdfg sdgfd tghj ''' re.findall("^.*",content,re.S) #['\nsadasf\nsdgdfg\nsdgfd\ntghj\n']
re.I 忽略大小寫
import re content='''sadasf sdgdfg sdgfd tghj ''' re.findall("^S",content,re.I)
import re content='''sadasf sdgdfg sdgfd tghj ''' re.findall("^S",content,re.I)
pip3 install lxml #解析器 pip3 install bs4
1.將要進行解析的原碼加載到bs對象 2.調用bs對象中相關的方法或屬性進行原碼中相關標籤的定位 3.將定位到的標籤之間存在的文本或屬性值提取
(1)根據標籤名查找 soup.a 只能找到全部符合要求的標籤第一個 (2)獲取屬性(值) soup.a.attrs 獲取a的全部屬性和屬性值,返回一個字典 soup.a.attrs['href'] 獲取a的href屬性值 soup.a["href"] 獲取a的href屬性值的簡寫 (3)獲取內容 soup.a.string 獲取a標籤中直系文本數據 soup.a.text 獲取a標籤的非直系文本數據 soup.a.get_text() 同上 (4)找到第一個符合要求的標籤 soup.find('a') 找到第一個a標籤 soup.find('a',title='xxx') soup.find('a',alt='xxx') soup.find('a',class_='xxx') soup.find('a',id='xxx') (5)找到全部符合要求的標籤 soup.find_all('a') 找到全部a標籤 soup.find_all('a',title='xxx') soup.find_all('a',alt='xxx') soup.find_all('a',class_='xxx') soup.find_all('a',id='xxx') (6)根據選擇器選擇指定的內容(返回值永遠是列表) select:soup.select("#xxx") 常見選擇器: 標籤選擇器:(a) 類選擇器:(.) id選擇器:(#) 層級選擇器: div .dudu #gh .name div>p>.acd>#hjk
(4)爬取詩詞名句網的三國演義
import requests from bs4 import BeautifulSoup url='http://www.shicimingju.com/book/sanguoyanyi.html' headers={ "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36' } response_str=requests.get(url=url,headers=headers).text soup=BeautifulSoup(response_str,'lxml') title_list=soup.select('.book-mulu > ul > li > a') with open('sanguoyanyi.txt','w',encoding='utf-8') as f: for title in title_list: title_str=title.string f.write(title_str) content_url='http://www.shicimingju.com'+title['href'] content=requests.get(url=content_url,headers=headers).text soup=BeautifulSoup(content,'lxml') content_list=soup.select('.chapter_content > p') for cont in content_list: cont_str=cont.string f.write(cont_str) f.close() print("爬取完成!!")