這幾天發(fā)現(xiàn)一個比較適合Python爬蟲初學者的網站,我是跟著里邊的kingname老師學習,這就當作是一個學習筆記里,有人想去聽老師講課,可以點這里。
單線程爬蟲
如何偽裝成瀏覽器呢?
import request
header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"}
html = request.get(url, header = header)
html.encoding = 'utf-8'
在get或者post的時候加入User-Agent可以偽裝成瀏覽器。至于怎么獲得User-Agent,chrome->F12->Network->隨便點一個接收的信息->Headers->Request Headers
。
解析HTML,獲取有用信息
- 正則表達式
比較笨的辦法。適用于網頁簡單,正則特別好寫的情況,不用安裝別的庫了。 - 利用DOM解析HTML
BeautifulSoup,request啊什么的都提供了一些功能強大的DOM解析方法,便于使用。 - 利用XPath解析HTML
這其實也是DOM解析的一種吧?但是在爬一些比較復雜的網頁時候,特別好用。
XPATH
怎么使用XPath?
from lxml import etree
selector = etree.HTML(html)
selector.xpath('XPATH')
XPath怎么寫?
// :根節(jié)點
/ :往下層尋找
/text():提取文本內容
/@attr :提取屬性內容
#提取div的id為first_div的文字內容
selector.xpath('//div[@id="first_div"]/text()')
#提取a標簽的href屬性
selector.xpath('//a/@href')
多線程爬蟲
雖然Python有GIL,但是多線程還是可以在一定程度上提升爬取的速度。
from multiprocessing.dummy import Pool as ThreadPool
pools = ThreadPool(__max_core_num__)
results = pools.map(Spider_function, target_urls)
pools.join()
pools.close()
map(func, seq)函數(shù)是Python內置函數(shù),用來接收seq內元素依此執(zhí)行func后返回的值。