python3學習之路-爬蟲篇
一、前期準備
1.安裝python3.7.3 開發環境
https://www.python.org/downloads/release/python-373/ 下載地址 選擇:Windows x86-64 executable installer(64位版本)或 Windows x86 executable installer(32位版本)下載並安裝python
2.安裝pyCharm開發工具
https://www.jetbrains.com/pycharm/download/#section=windows 點擊 download free trial 下載並安裝pycharm開發工具
注:運行pycharm需要 先到 http://idea.lanyus.com/獲取激活碼 在打開
3.掌握python基本語法
1.變量和字符串。常用的字符串函數 split(),replace(),strip(),format()
2.函數與控制語句。定義函數 def function(e):
return true
3.數據結構。包括:列表[] 字典{} 元祖()和集合{},集合無重複數據
4.python文件操作。打開文件:open(url,'r/w/a/b/+') url:文件地址,r:讀模式,w:寫模式,a:追加模式,b:二進制模式,+:讀/寫模式
寫入文件:write()
讀取文件:read()
關閉文件:close()
5.python面向對象。定義類: class Bike:
實例屬性:my_bike=Bike()
my_bike.other='test'
實例方法:def use(self):
print('use')
my_bike=Bike()
my_bike.use()
魔術方法:__init__() 創建實例時會被默認執行
類的繼承:class Share_bike(Bike):
二、爬蟲原理
1,爬蟲做了兩件事,首先模擬計算機對服務器發起Request請求,再對服務器端的Response內容解析和提取所需的信息
2.爬蟲流程
3.查詢網頁源代碼結構方法,打開任意網頁右鍵–>檢查網頁源代碼。或者ctrl+u 快捷方式查看網頁源代碼
三、爬蟲所需要的第三方庫
1、requests庫
安裝:pip install requests
使用:import requests
requests.get(url)
2、 beautifulSoup庫
需要安裝庫 bs4 : pip3 install bs4
from bs4 import BeautifulSoup
import requests
#主要代碼
def getUrlInfo(url):
info = requests.get(url)
soup = BeautifulSoup(info.text,'lxml')
titles = soup.select('#page>ul>ul>li>a')
title = titles.get_text().strip()
3、lxml庫
from lxml import etree
import requests
#主要代碼
def getUrlInfo(url):
info = requests.get(url)
selector = etree.HTML(html.text)
infos = selector.xpath('//*[@id="leftcolumn"]/a') #可以通過瀏覽器f12 點擊標籤右鍵Copy->Copy Xpath 獲取
四、正則表達式
1.一般字符
. : 匹配任意單個字符(不包括\n)
\ : 轉義字符
[]: 匹配字符集中的任意單個字符 如:a[bc] 可以匹配到ab,ac
| : 表示或的關係,如A|B 可以匹配A或B
():定義分組匹配
2.預定義字符集
\\:匹配反斜槓\字符
\n:匹配換行
\r:匹配回車
\f:匹配一個換頁符
\t:匹配一個水平製表符
\v:匹配一個垂直製表符
\d:匹配任一數字 等價於[0~9]
\D:匹配任一個非數字字符 等價於[^0~9]
\s:匹配任一空白字符,包括空格、製表符、換頁符等 等價於[\f\n\r\t\v]
\S:匹配任一非空白字符,等價於[^\s]
\w:匹配包括下劃線的任意單詞字符,等價於[A-Za-z0-9_]
\W:匹配任何非單詞字符,等價於[^\w]
3.數量詞
*:匹配前一個字符,0~無限次
+:匹配前一個字符,1~無限次
?:匹配前一個字符,0~1次
{m}:匹配前一個字符,m次
{m,}:匹配前一個字符,至少m次
{m,n}:匹配前一個字符,m~n次
4.邊界匹配
^:匹配字符串開頭
$:匹配字符串結尾
\A:僅匹配字符串的開頭
\Z:僅匹配字符串的結尾
5.re模塊及其方法
引用:import re
函數:
re.search('正則表達式','匹配字符串','標誌位') #返回第一個匹配的字符,沒有返回None
re.match('正則表達式','匹配字符串') #返回第一個匹配的字符,沒有返回None
re.findall('正則表達式','匹配字符串','標誌位') #和search類似,但是返回所有的匹配字符
re.finditer('正則表達式','匹配字符串') #和findall類似,但是返回一個匹配字符
re.split('正則表達式','要分割的字符串','最大分割次數','標誌位') #分割字符串爲列表對象
re.sub('正則表達式','替換的字符串','要被替換的字符串','替換次數','標誌位') #字符串替換
re.compile('正則表達式','標誌位') #編譯正則表達式
標誌位:re.I 是匹配忽略大小寫
re.L 做本地化識別匹配
re.M 多行匹配
re.S 匹配中包括換行
re.U 根據Unicode編碼解析字符
re.A 根據ASCII編碼解析字符
re.X 詳細模式
示例:
import re
import requests
def getUrlInfo(url):
res = requests.get(url)
if res.status_code == 200:
content = res.findall('<p>(.*?)</p>',res.content.decode('utf-8'),re.S)
else:
print('false')
四、使用API
1.百度APIStore: https://cloud.baidu.com/market
五、數據庫存儲
1、NoSql數據庫分類
1.鍵值存儲數據庫(如redis)
2.列存儲數據庫(如Hbase)
3.文檔型數據庫(如MongoDB)
4.圖形數據庫(如:Graph)
2、mongoDB
1.官網:https://www.mongodb.com
2.Pymongo第三方庫:pip3 install pumongo
3.mongodb管理工具:https://robomongo.org
4.MySql
#mogoDB
import pymongo
client = pymongo.MongoClient('localhost',27017)
mydb = client['mydb']
test = mydb['test']
test.insert_one({'name':'111','sex':'male','age':111})
#mysql
import pymysql
conn = pymysql.connect(host='localhost',user='root',passwd='root',db='mydb',port=3306,charset='utf8')
cursor=conn.cursor()
cursor.execute('insert into student (name,age,sex) values(%s,%s,%s)',('111',11,'male'))
conn.commit()
六、多線程爬蟲
1.多線程:在一個進程中,程序在不同的線程中來回切換運行。
2.多進程:同一時刻在不同進程中來回切換的運行,因爲每個cpu在同一時刻只能運行一個進程。
使用方法:
from multiprocessing import Pool
pool = Pool(processes=4) #創建4個進程池
pool.map(func,urls) #運行func函數
七、異步加載
異步加載(AJAX)異步刷新頁面
八、表單交互與模擬登錄
1.表單交互POST
import requests
params ={
'key1':'value1'
}
html = requests.post(url,data=params)
print(html.text)
2.模擬登錄Cookie
import requests
url = ''
headers = {
'Cookie':''
}
html = requests.get(url,headers=headers)
print(html.text)
九、scarpy爬蟲框架
需要安裝庫:
1.Lxml庫 pip3 install Lxml
2.zope.interface庫 pip3 install zope.interface
3.twisted庫 需要在whell庫安裝
4.pyOpenSSL庫 pip3 install pyOpenSSL
5.pywin32庫 需要在whell庫安裝
6.Scrapy庫 pip3 install scrapy