這幾天發(fā)現(xiàn)一個(gè)比較適合Python爬蟲初學(xué)者的網(wǎng)站娜遵,我是跟著里邊的kingname老師學(xué)習(xí)勘畔,這就當(dāng)作是一個(gè)學(xué)習(xí)筆記里判莉,有人想去聽老師講課讨便,可以點(diǎn)這里。
單線程爬蟲
如何偽裝成瀏覽器呢演熟?
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的時(shí)候加入User-Agent可以偽裝成瀏覽器鞭执。至于怎么獲得User-Agent,chrome->F12->Network->隨便點(diǎn)一個(gè)接收的信息->Headers->Request Headers
芒粹。
解析HTML兄纺,獲取有用信息
- 正則表達(dá)式
比較笨的辦法。適用于網(wǎng)頁簡(jiǎn)單化漆,正則特別好寫的情況估脆,不用安裝別的庫了。 - 利用DOM解析HTML
BeautifulSoup座云,request啊什么的都提供了一些功能強(qiáng)大的DOM解析方法疙赠,便于使用。 - 利用XPath解析HTML
這其實(shí)也是DOM解析的一種吧朦拖?但是在爬一些比較復(fù)雜的網(wǎng)頁時(shí)候圃阳,特別好用。
XPATH
怎么使用XPath璧帝?
from lxml import etree
selector = etree.HTML(html)
selector.xpath('XPATH')
XPath怎么寫捍岳?
// :根節(jié)點(diǎn)
/ :往下層尋找
/text():提取文本內(nèi)容
/@attr :提取屬性內(nèi)容
#提取div的id為first_div的文字內(nèi)容
selector.xpath('//div[@id="first_div"]/text()')
#提取a標(biāo)簽的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內(nèi)置函數(shù)祟同,用來接收seq內(nèi)元素依此執(zhí)行func后返回的值。