css中css
身份證 id對應#html
衣服 class對應 . node
圖片python
pyquery。。。as pqweb
html= request.get(url=''.....'')正則表達式
doc=pq(html)數據庫
doc("#dq_list > li").items() tems()拿到全部子元素json
for item in items:windows
url= item.find('img').attr("lz_src")數組
url_content= requests.get(url= url).content
name= item.find('.kp-name').text()
with open("./xxxxx")+name+".jpg","wb")as f:
file.write(url_content)
馬賽克合成工具foto
css選擇器
1.元素選擇器 直接選擇文檔元素,如head p 這些
2.類選擇器 對<h1 class="important">,類名就是important .important就是選擇全部這個類屬性的元素 可結合元素選擇器,好比p.important
3.id選擇器 對<h1 id="intro"> id就是important #intro就是選擇id=intro的元素 可結合元素選擇器,好比p.#intro
類選擇器能夠全局共享,可是i同一d一個文檔只能出現一次,是全局惟一的,不能使用單詞列表
與類選擇器同樣都區分大小寫
4.屬性選擇器 選擇有某一個屬性的元素,而不論值是什麼 *[title]選擇全部包含title的元素 a[herf]選擇全部帶有href屬性的錨元素
能夠選擇多個元素a[herf][title]這裏是and屬性,要同時知足
限定值a[href="www.baidu.com"]
5.後代選擇器 選擇某一個元素後代的元素(在層級上面沒有限制) h1 em
6.子元素選擇器 範圍限制在子元素 h1 > strong
Xpath
基本節點:元素、屬性文本、命名空間、處理指令、註釋以及根節點
節點之間的關係:父 子 兄弟 先輩 後代
nodename選取此節點的全部子節點
/從根節點選取
//從匹配的當前的節點選擇文檔中的節點,不考慮它們的位置
.選取當前節點
..選取當前節點的父節點
@選取屬性
Xpath的謂語很強大,寫在[]裏面
/bookstore/book[1]選第一個book元素
/bookstore/book[last()]最後一個book元素
/bookstore/book[position()<3]選前兩個
//title[@lang]選擇的全部有名字爲lang的屬性的title屬性
/bookstore/book[price>35.00]
Json 讓xml簡單化
import jason
obj = {'one':1,'two':2,'three':[1,2,3]}
encoded= jason.dumps(obj) 變成str
decoded= json.loads(encoded) 變成dict
xml處理
1.DOM方法 整個讀取 量小的話還行,可是性能其實很慢
from xml.dom import minidom doc = minidom.parse('book.xml') root = doc.documentElement print(root.nodeName) books = root.getElementsByTagName('book') for book in books: titles = book.getElementsByTagName('book') #這裏拿到的是一個數組 title = titles[0].childNodes[0].nodeValue print(title)
2.SAX流模式 邊讀邊解析 層級關係必須本身弄 在數據庫中用的比較多吧
import string from xml.parsers.expat import ParserCreate class DefaultSaxHandler: def start_element(self,name,attrs): self.name = name print('elements:%s, attrs: %s'%(name,str(attrs))) def end_element(self,name): print('end elements:%s')%name) def end_element(self,name): if text.strip() print("%S's text is %s")%(self.name,text)) handler = DefaultSaxHandler() parser= ParserCreate() parser.StartElementHandler = handler.start_element #<book> parser.EndElementHandler = handler.end_element #</book>
parser.CharacterDataHandler = handler.char_data #<title>character</title>
with open('book.xml','r') as f:
parser.Parser(f.read())
正則表達式
基本匹配規則 很少複述
一些規則:
*匹配前面的字符或者表達式0詞或者屢次
+匹配前一個字符至少一次
?匹配前一個字符至少0次或者1次
^匹配字符串開頭
$匹配字符串結束
import re mr= re.match(r'\d{3}-\d{3,8}','010-223456') print(mr.string) m = re.match(r'(\d{3}-\d{3,8})$','010-223456') print(mr.groups()) print(mr.group(0)) #原始字符串
t ='20:15:45'
m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$',t)
print(m.groups())
#分割字符串 p= re.complie(r'\d+') #先寫好匹配的路徑,生成python對象
print(p.split('one1two22three333'))
selenium簡單爬蟲使用
主要是運用如下的兩個代碼來爬取數據,其餘的相關基本設置就看一下下面的案例
find_element(s)_by_tag_name
find_element(s)_by_css_selector
improt time from selenium import webdriver browser = webdriver.Chrome() browser.set_page_load_timeout(30) browser.get('xxxxxxxxxxxxxxxxx') page_info = browser.find_element_by_csss_selector('這裏貼谷歌網頁中的css路徑') #目標信息假設是 共48頁,每頁24條 pages = int((page_info.text.split(', ')[0]).split(' ')[1]) #這樣就取到了48這個數字 print('商品一共有%d頁'%pages) for i in range(pages): if i >2: break url = ' xxxxxxxxxxxxx'+str(i+1) browser.get(url) browser.execute_script("windows.scrollTo(0,document.body.scrollHeight);")
time.sleep(2)
goods = browser.find_element_by_css_selector("xxxx主標籤xxxx").find_elements_by_tag_name('li')
print('第%d頁有%d件商品'%((i+1),len(goods))
for good in goods:
try:
title = good.find_element_by_css_selector('.....').text
price = good.find_element_by_css_selector('.....').text
print(title,price)
except:
print('ERROR')
可是咱們也會發現,每一次爬取的時候都會跳出自動運行的瀏覽器
這實際上是能夠避免的,詳細的能夠參考個人學習筆記