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.爬蟲流程

開始
爬取列表頁URL
URL存入列表中
是否循環
爬取詳細頁數據
存儲數據
停止爬取結束

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章