python爬蟲bs4
一:Beautiful Soup 爬蟲
requests庫的安裝與使用
安裝beautiful soup 爬蟲環境
beautiful soup 的解析器
re庫 正則表達式的使用
bs4 爬蟲實踐: 獲取網路貼吧的內容
bs4 爬蟲實踐: 獲取雙色球中獎信息
bs4 爬蟲實踐: 獲取起點小說信息
bs4 爬蟲實踐: 獲取電影信息
bs4 爬蟲實踐: 獲取悅音台榜單
安裝Scrapy
Scrapy中的選擇器 Xpath和CSS
Scrapy 爬蟲實踐:今日影視
Scrapy 爬蟲實踐:天氣預報
Scrapy 爬蟲實踐:獲取代理
Scrapy 爬蟲實踐:糗事網路
Scrapy 爬蟲實踐: 爬蟲相關攻防(代理池相關)
Mechanize模塊的安裝與使用
利用Mechanize獲取樂音台公告
Selenium模塊的安裝與使用
瀏覽器的選擇 PhantomJS
Selenium & PhantomJS 實踐: 獲取代理
Selenium & PhantomJS 實踐: 漫畫爬蟲
二: Scrapy 爬蟲框架
三: 瀏覽器模擬爬蟲
『貳』 python爬蟲 將在線html網頁中的圖片鏈接替換成本地鏈接並將html文件下載到本地
正則匹配原鏈接替換為本地路徑即可
『叄』 python爬蟲——正則爬取手機號
cmd → pip install re → 回車
cmd → pip install requests → 回車
cmd → pip install beautifulsoup4 → 回車
import requests
import re
from bs4 import BeautifulSoup
r = requests.get("http://www.haomahao.com/")
parttern = "1[35789]\d{9}"
import requests
import re
from bs4 import BeautifulSoup
def down():
r = requests.get("http://www.haomahao.com/") #調用網頁
r.encoding = r.apparent_encoding #更改明旅網頁編碼,防沒塌止出現枯槐圓亂碼
#print(r.text)
bs = BeautifulSoup(r.text,"html.parser")
str1 = bs.getText() #將BeautifulSoup提出出來的寫完text
parttern = "1[35789]\d{9}" #編寫手機號的正則表達式
list = re.findall(parttern,str1)
#print(list) #調試正則是否正確
f = open("手機號.txt",mode="w",encoding="utf-8") #寫入文件
f.write("\n".join(list))
f.close()
if __name__ == "__main__":
down()
『肆』 如何用Python爬蟲抓取網頁內容
首先,你要安裝requests和BeautifulSoup4,然後執行如下代碼.
importrequests
frombs4importBeautifulSoup
iurl='http://news.sina.com.cn/c/nd/2017-08-03/doc-ifyitapp0128744.shtml'
res=requests.get(iurl)
res.encoding='utf-8'
#print(len(res.text))
soup=BeautifulSoup(res.text,'html.parser')
#標題
H1=soup.select('#artibodyTitle')[0].text
#來源
time_source=soup.select('.time-source')[0].text
#來源
origin=soup.select('#artibodyp')[0].text.strip()
#原標題
oriTitle=soup.select('#artibodyp')[1].text.strip()
#內容
raw_content=soup.select('#artibodyp')[2:19]
content=[]
forparagraphinraw_content:
content.append(paragraph.text.strip())
'@'.join(content)
#責任編輯
ae=soup.select('.article-editor')[0].text
這樣就可以了
『伍』 python爬蟲時,bs4無法讀取網頁標簽中的文本
稍微說一下背景,當時我想研究蛋白質與小分子的復合物在空間三維結構上的一些規律,首先得有數據啊,數據從哪裡來?就是從一個涵蓋所有已經解析三維結構的蛋白質-小分子復合物的資料庫裡面下載。這時候,手動一個個去下顯然是不可取的,我們需要寫個腳本,能從特定的網站選擇性得批量下載需要的信息。python是不錯的選擇。
import urllib #python中用於獲取網站的模塊
import urllib2, cookielib
有些網站訪問時需要cookie的,python處理cookie代碼如下:
cj = ***.cookiejar ( )
opener = ***.build_opener( ***.httpcookieprocessor(cj) )
***.install_opener (opener)
通常我們需要在網站中搜索得到我們需要的信息,這里分為二種情況:
1. 第一種,直接改變網址就可以得到你想要搜索的頁面:
def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/***.cgi?&' + 『你想要搜索的參數』 # 結合自己頁面情況適當修改
page = ***.urlopen(url)
pageContent = ***.read( )
return pageContent #返回的是HTML格式的頁面信息
2.第二種,你需要用到post方法,將你搜索的內容放在postdata裡面,然後返回你需要的頁面
def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx' #這個網址是你進入搜索界面的網址
postData = ***.urlencode( { 各種『post』參數輸入 } ) #這裡面的post參數輸入需要自己去查
req= ***.request (url, postData)
pageContent = ***.urlopen (req). read( )
return pageContent #返回的是HTML格式的頁面信息
在獲取了我們需要的網頁信息之後,我們需要從獲得的網頁中進一步獲取我們需要的信息,這里我推薦使用 BeautifulSoup 這個模塊, python自帶的沒有,可以自行網路谷歌下載安裝。 BeautifulSoup 翻譯就是『美味的湯』,你需要做的是從一鍋湯裡面找到你喜歡吃的東西。
import re # 正則表達式,用於匹配字元
from bs4 import BeautifulSoup # 導入BeautifulSoup 模塊
soup = BeautifulSoup(pageContent) #pageContent就是上面我們搜索得到的頁面
soup就是 HTML 中所有的標簽(tag)BeautifulSoup處理格式化後的字元串,一個標準的tag形式為:
hwkobe24
通過一些過濾方法,我們可以從soup中獲取我們需要的信息:
(1) find_all ( name , attrs , recursive , text , **kwargs)
這裡面,我們通過添加對標簽的約束來獲取需要的標簽列表, 比如 ***.find_all ('p') 就是尋找名字為『p』的 標簽,而***.find_all (class = "tittle") 就是找到所有class屬性為"tittle" 的標簽,以及***.find_all ( class = ***.compile('lass')) 表示 class屬性中包含『lass』的所有標簽,這里用到了正則表達式(可以自己學習一下,非常有用滴)
當我們獲取了所有想要標簽的列表之後,遍歷這個列表,再獲取標簽中你需要的內容,通常我們需要標簽中的文字部分,也就是網頁中顯示出來的文字,代碼如下:
tagList = ***.find_all (class="tittle") #如果標簽比較復雜,可以用多個過濾條件使過濾更加嚴格
for tag in tagList:
print ***.text
***.write ( str(***.text) ) #將這些信息寫入本地文件中以後使用
(2)find( name , attrs , recursive , text , **kwargs )
它與 find_all( ) 方法唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果
(3)find_parents( ) find_parent( )
find_all() 和 find() 只搜索當前節點的所有子節點,孫子節點等. find_parents() 和 find_parent() 用來搜索當前節點的父輩節點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內容
(4)find_next_siblings() find_next_sibling()
這2個方法通過 .next_siblings 屬性對當 tag 的所有後面解析的兄弟 tag 節點進代, find_next_siblings() 方法返回所有符合條件的後面的兄弟節點,find_next_sibling() 只返回符合條件的後面的第一個tag節點
(5)find_previous_siblings() find_previous_sibling()
這2個方法通過 .previous_siblings 屬性對當前 tag 的前面解析的兄弟 tag 節點進行迭代, find_previous_siblings()方法返回所有符合條件的前面的兄弟節點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節點
(6)find_all_next() find_next()
這2個方法通過 .next_elements 屬性對當前 tag 的之後的 tag 和字元串進行迭代, find_all_next() 方法返回所有符合條件的節點, find_next() 方法返回第一個符合條件的節點
(7)find_all_previous() 和 find_previous()
這2個方法通過 .previous_elements 屬性對當前節點前面的 tag 和字元串進行迭代, find_all_previous() 方法返回所有符合條件的節點, find_previous()方法返回第一個符合條件的節點
具體的使用方法還有很多,用到這里你應該可以解決大部分問題了,如果要更深入了解可以參考官方的使用說明哈!
『陸』 python爬蟲時,bs4無法讀取網頁標簽中的文本
剛看了下虎撲的帖子。帖子的瀏覽量是動態載入的。並不是靜態頁面。所以常規的爬蟲爬取的內容是空的。目前我了解的有兩種方法可以去獲取瀏覽量。一種是使用selenium + chrome。模擬瀏覽器載入。這種對於動態載入的頁面比較有效。缺點就是效率太低。虎撲的帖子不建議使用(用不上)。另外一種就是找到虎撲獲取瀏覽量的請求鏈接。看截圖:
希望可以幫到你,如有問題可以繼續追問。謝謝