前言requests庫(kù)的好,只有用過(guò)的人才知道,最近這個(gè)庫(kù)的作者又出了一個(gè)好用的爬蟲框架requests-html。之前解析html頁(yè)面用過(guò)了lxml和bs4, requests-html集成了一些常用爬蟲庫(kù)的優(yōu)點(diǎn),依然是為人類服務(wù):HTML Parsing for Humans。 目前只支持python3.6 環(huán)境準(zhǔn)備requests-html的GitHub地址https://github.com/kennethreitz/requests-html,使用pip就能直接安裝了。 pip install requests-html
該庫(kù)旨在使解析HTML(例如,抓取Web)盡可能簡(jiǎn)單直觀, 有以下優(yōu)勢(shì): 完整的JavaScript支持! CSS Selectors(又名jQuery風(fēng)格,感謝PyQuery)。 XPath Selectors,對(duì)于膽小的人來(lái)說(shuō)。 模擬用戶代理(如真實(shí)的Web瀏覽器)。 自動(dòng)跟蹤重定向。 連接池和cookie持久性。 令人欣喜的請(qǐng)求體驗(yàn),具有神奇的解析能力。 異步支持
抓頁(yè)面url地址先發(fā)個(gè)get請(qǐng)求,返回response對(duì)象,通過(guò)r.html.links獲取頁(yè)面的全部鏈接,包含一些相對(duì)路徑的地址,如果只想獲取絕對(duì)路徑的地址,可以用r.html.absolute_links from requests_html import HTMLSession session = HTMLSession()
r = session.get('https:///')
# 獲取頁(yè)面上的所有鏈接 all_links = r.html.links print(all_links)
# 絕對(duì)路徑鏈接 all_absolute_links = r.html.absolute_links print(all_absolute_links) 運(yùn)行結(jié)果, 返回內(nèi)容太多,省略了一部分: {'http://pycon./', '/community/', 'http:///dev/peps/', '/events/python-events/831/', , 'http://www.'} {'http://pycon./', 'https://www./dev/', 'https://wiki./PySide', 'https://www./events/python-events/817/'} 從返回的結(jié)果可以看出,返回的是set集合,會(huì)自動(dòng)的去除重復(fù)的鏈接地址 xpath定位用過(guò)lxml庫(kù)的小伙伴應(yīng)該知道https://www.cnblogs.com/yoyoketang/p/9661273.html,lxml可以支持xpath查找元素對(duì)象,requests-html也可以完美的支持xpath 接下來(lái)我需要獲取目標(biāo)網(wǎng)站:https://www.cnblogs.com/yoyoketang/tag/django/, 獲取所有的文章標(biāo)題,xpath語(yǔ)法:.//*[@id=’myposts’]/div/div/a 
參考代碼 from requests_html import HTMLSession session = HTMLSession()
r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/') # 只獲取第一個(gè) f = r.html.xpath(".//*[@id='myposts']/div/div/a", first=True).text print(f)
# 獲取全部 all = r.html.xpath(".//*[@id='myposts']/div/div/a") for i in all: print(i.text) # 獲取文本 print(i.absolute_links) # 獲取鏈接 運(yùn)行結(jié)果 python測(cè)試開發(fā)django-49.allow_tags和mark_safe python測(cè)試開發(fā)django-49.allow_tags和mark_safe {'https://www.cnblogs.com/yoyoketang/p/10659137.html'} python測(cè)試開發(fā)django-48.xadmin上傳圖片django-stdimage {'https://www.cnblogs.com/yoyoketang/p/10655601.html'} python測(cè)試開發(fā)django-47.xadmin上傳圖片和文件 {'https://www.cnblogs.com/yoyoketang/p/10653878.html'} xpath方法返回是一個(gè)list,加上 first=True參數(shù)返回第一個(gè)結(jié)果 css定位支持requests-html同樣支持CSS Selector的方法,把上面案例用css定位也可以實(shí)現(xiàn)同樣效果 from requests_html import HTMLSession session = HTMLSession()
r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/') # 只獲取第一個(gè) css語(yǔ)法 f = r.html.find(".PostList>div>a", first=True).text print(f)
# 獲取全部 css語(yǔ)法 all = r.html.find(".PostList>div>a") for i in all: print(i.text) # 獲取文本 print(i.absolute_links) # 獲取鏈接 其它方法from requests_html import HTMLSession session = HTMLSession()
r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')
about = r.html.find(".PostList>div", first=True)
# 1.獲取文本 print(about.text)
# 2.獲取html內(nèi)容 print(about.html)
# 3.獲取全部屬性 print(about.attrs)
# 4.獲取鏈接 print(about.absolute_links )
# 5.搜索文字 print(about.search('python測(cè)試開發(fā){}和mark_safe')[0])
# 6.繼續(xù)定位子元素 print(about.find('a')) # 返回list element對(duì)象
# 7.containing 模糊匹配 只包含'django'文本的對(duì)象 a = about.find('a', containing='django') print(a) 運(yùn)行結(jié)果 python測(cè)試開發(fā)django-49.allow_tags和mark_safe <div class="postTitl2"><a id="PostsList1_rpPosts_TitleUrl_0">python測(cè)試開發(fā)django-49.allow_tags和mark_safe</a></div> {'class': ('postTitl2',)} {'https://www.cnblogs.com/yoyoketang/p/10659137.html'} django-49.allow_tags [<Element 'a' id='PostsList1_rpPosts_TitleUrl_0'>] [<Element 'a' id='PostsList1_rpPosts_TitleUrl_0'>] 這些只是一些基本的功能,requests-html還可以支持JavaScript渲染頁(yè)面,看下一篇python接口自動(dòng)化29-requests-html支持JavaScript渲染頁(yè)面 2019年《python3接口自動(dòng)化》課程3月17-4月14開課 主講老師:上海-悠悠 上課方式:QQ群視頻在線教學(xué) 上課時(shí)間:每周六、周日晚上20:30-22:30 報(bào)名費(fèi):1000
|