python爬取文章
Ⅰ 如何用python寫爬蟲來獲取網頁中所有的文章以及關鍵詞
所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,保存到本地。
類似於使用程序模擬IE瀏覽器的功能,把URL作為HTTP請求的內容發送到伺服器端, 然後讀取伺服器端的響應資源。
在Python中,我們使用urllib2這個組件來抓取網頁。
urllib2是Python的一個獲取URLs(Uniform Resource Locators)的組件。
它以urlopen函數的形式提供了一個非常簡單的介面。
最簡單的urllib2的應用代碼只需要四行。
我們新建一個文件urllib2_test01.py來感受一下urllib2的作用:
import urllib2
response = urllib2.urlopen('http://www..com/')
html = response.read()
print html
按下F5可以看到運行的結果:
我們可以打開網路主頁,右擊,選擇查看源代碼(火狐OR谷歌瀏覽器均可),會發現也是完全一樣的內容。
也就是說,上面這四行代碼將我們訪問網路時瀏覽器收到的代碼們全部列印了出來。
這就是一個最簡單的urllib2的例子。
除了"http:",URL同樣可以使用"ftp:","file:"等等來替代。
HTTP是基於請求和應答機制的:
客戶端提出請求,服務端提供應答。
urllib2用一個Request對象來映射你提出的HTTP請求。
在它最簡單的使用形式中你將用你要請求的地址創建一個Request對象,
通過調用urlopen並傳入Request對象,將返回一個相關請求response對象,
這個應答對象如同一個文件對象,所以你可以在Response中調用.read()。
我們新建一個文件urllib2_test02.py來感受一下:
import urllib2
req = urllib2.Request('http://www..com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
可以看到輸出的內容和test01是一樣的。
urllib2使用相同的介面處理所有的URL頭。例如你可以像下面那樣創建一個ftp請求。
req = urllib2.Request('ftp://example.com/')
在HTTP請求時,允許你做額外的兩件事。
1.發送data表單數據
這個內容相信做過Web端的都不會陌生,
有時候你希望發送一些數據到URL(通常URL與CGI[通用網關介面]腳本,或其他WEB應用程序掛接)。
在HTTP中,這個經常使用熟知的POST請求發送。
這個通常在你提交一個HTML表單時由你的瀏覽器來做。
並不是所有的POSTs都來源於表單,你能夠使用POST提交任意的數據到你自己的程序。
一般的HTML表單,data需要編碼成標准形式。然後做為data參數傳到Request對象。
編碼工作使用urllib的函數而非urllib2。
我們新建一個文件urllib2_test03.py來感受一下:
import urllib
import urllib2
url = 'http://www.someserver.com/register.cgi'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
data = urllib.urlencode(values) # 編碼工作
req = urllib2.Request(url, data) # 發送請求同時傳data表單
response = urllib2.urlopen(req) #接受反饋的信息
the_page = response.read() #讀取反饋的內容
如果沒有傳送data參數,urllib2使用GET方式的請求。
GET和POST請求的不同之處是POST請求通常有"副作用",
它們會由於某種途徑改變系統狀態(例如提交成堆垃圾到你的門口)。
Data同樣可以通過在Get請求的URL本身上面編碼來傳送。
import urllib2
import urllib
data = {}
data['name'] = 'WHY'
data['location'] = 'SDU'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
print url_values
name=Somebody+Here&language=Python&location=Northampton
url = 'http://www.example.com/example.cgi'
full_url = url + '?' + url_values
data = urllib2.open(full_url)
這樣就實現了Data數據的Get傳送。
2.設置Headers到http請求
有一些站點不喜歡被程序(非人為訪問)訪問,或者發送不同版本的內容到不同的瀏覽器。
默認的urllib2把自己作為「Python-urllib/x.y」(x和y是Python主版本和次版本號,例如Python-urllib/2.7),
這個身份可能會讓站點迷惑,或者乾脆不工作。
瀏覽器確認自己身份是通過User-Agent頭,當你創建了一個請求對象,你可以給他一個包含頭數據的字典。
下面的例子發送跟上面一樣的內容,但把自身模擬成Internet Explorer。
(多謝大家的提醒,現在這個Demo已經不可用了,不過原理還是那樣的)。
import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
以上就是python利用urllib2通過指定的URL抓取網頁內容的全部內容,非常簡單吧,希望對大家能有所幫助。
Ⅱ 微信公眾號及服務號文章爬取
使用Python爬取公眾號文章主要兩種方法:
微信傳送門已被封殺,現存可用的是搜狗微信搜索,2013年騰訊以39.2%的持股和52.3%的投票權,成為搜狗第一大股東,2020年騰訊全資147億收購搜狗,可以說搜狗已是騰訊的樣子,而自2013年開始搜狗搜索就接入了微信公眾號數據,因此實際上也能看做第一方的搜索介面。
域名: https://weixin.sogou.com/
可以直接搜索公眾號或文章關鍵字獲取數據,但是此方法有個比較大的問題,只能搜索公眾號內容,而很多公眾號其實是服務號,服務號使用此方法是搜索不到任何數據的,因此需要另一種方式進行爬取。
這個介面無法稿升匿名訪問,因此需要注冊一個公眾號進行操作
具體操作步驟:登錄微信公眾號,首頁選擇創作 圖文消息 ,在編輯工具欄找到 超鏈接 ,在公眾號一欄 選擇其他公眾號 ,之後輸入需要獲取的公眾號名字進行搜索就會出現相匹配的公眾號列表,最後點擊所需公眾號,就會以時間倒序方式顯示具體文章列表,如下圖:
返回數據格式,如下圖:
爬取原理基本就結束了,具體介面分析過程較為簡單就不列了。
由於微信公眾平台登錄驗證較為嚴格,登陸時還需要進行收集掃碼確認,因此確認最終使用 selenium 自動鍵稿老化進行登錄獲取 cookies 及 token 的工作,訪問介面則使用 requests ,而因為詳細文章數據是js動態載入出來,因敬段此在這里依然選擇通過 selenium 自動化獲取頁面,之後就可以通過xpath等方法獲得文章內容。
資料查詢中有網友稱,此介面有訪問頻次限制,最少的出現過爬200篇文章就被封的現象,因此頻率最好盡可能設置一個較大范圍的隨機數,且控制頻率不要過多,代理無用,因為你是需要登錄進行操作的。[手動狗頭]
源碼我想著放上來太長了,如需請留言。
Ⅲ python怎麼抓取微信閱
抓取微信公眾號的文章
一.思路分析
目前所知曉的能夠抓取的方法有:
1、微信APP中微信公眾號文章鏈接的直接抓取(http://mp.weixin.qq.com/s?__biz=MjM5MzU4ODk2MA==&mid=2735446906&idx=1&sn=&scene=0#rd)
2、通過微信合作方搜狗搜索引擎(http://weixin.sogou.com/),發送相應請求來間接抓取
第1種方法中,這種鏈接不太好獲取,而且他的規律不是特別清晰。
因此本文採用的是方法2----通過給 weixin.sogou.com 發送即時請求來實時解析抓取數據並保存到本地。
二.爬取過程
1、首先在搜狗的微信搜索頁面測試一下,這樣能夠讓我們的思路更加清晰
在搜索引擎上使用微信公眾號英文名進行「搜公眾號」操作(因為公眾號英文名是公眾號唯一的,而中文名可能會有重復,同時公眾號名字一定要完全正確,不然可能搜到很多東西,這樣我們可以減少數據的篩選工作,只要找到這個唯一英文名對應的那條數據即可),即發送請求到'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_= ' % 'python',並從頁面中解析出搜索結果公眾號對應的主頁跳轉鏈接。
2.獲取主頁入口內容
使用request , urllib,urllib2,或者直接使用webdriver+phantomjs等都可以
這里使用的是request.get()的方法獲取入口網頁內容
[python]view plain
#爬蟲偽裝頭部設置
self.headers={'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;rv:51.0)Gecko/20100101Firefox/51.0'}
#設置操作超時時長
self.timeout=5
#爬蟲模擬在一個request.session中完成
self.s=requests.Session()
#搜索入口地址,以公眾為關鍵字搜索該公眾號
defget_search_result_by_keywords(self):
self.log('搜索地址為:%s'%self.sogou_search_url)
returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content
#獲得公眾號主頁地址
defget_wx_url_by_sougou_search_html(self,sougou_search_html):
doc=pq(sougou_search_html)
#printdoc('p[class="tit"]')('a').attr('href')
#printdoc('div[class=img-box]')('a').attr('href')
#通過pyquery的方式處理網頁內容,類似用beautifulsoup,但是pyquery和jQuery的方法類似,找到公眾號主頁地址
returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
#使用webdriver載入公眾號主頁內容,主要是js渲染的部分
defget_selenium_js_html(self,url):
browser=webdriver.PhantomJS()
browser.get(url)
time.sleep(3)
#執行js得到整個頁面內容
html=browser.execute_script("returndocument.documentElement.outerHTML")
returnhtml
#獲取公眾號文章內容
defparse_wx_articles_by_html(self,selenium_html):
doc=pq(selenium_html)
print'開始查找內容msg'
returndoc('div[class="weui_media_boxappmsg"]')
#有的公眾號僅僅有10篇文章,有的可能多一點
#returndoc('div[class="weui_msg_card"]')#公眾號只有10篇文章文章的
#!/usr/bin/python
#coding:utf-8
importsys
reload(sys)
sys.setdefaultencoding('utf-8')
fromurllibimportquote
frompyqueryimportPyQueryaspq
fromseleniumimportwebdriver
importrequests
importtime
importre
importjson
importos
classweixin_spider:
def__init__(self,kw):
'構造函數'
self.kw=kw
#搜狐微信搜索鏈接
#self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_='%quote(self.kw)
self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_='%quote(self.kw)
#爬蟲偽裝
self.headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64;rv:47.0)Gecko/20100101Firephp/0refox/47.0FirePHP/0.7.4.1'}
#操作超時時長
self.timeout=5
self.s=requests.Session()
defget_search_result_by_kw(self):
self.log('搜索地址為:%s'%self.sogou_search_url)
returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content
defget_wx_url_by_sougou_search_html(self,sougou_search_html):
'根據返回sougou_search_html,從中獲取公眾號主頁鏈接'
doc=pq(sougou_search_html)
#printdoc('p[class="tit"]')('a').attr('href')
#printdoc('div[class=img-box]')('a').attr('href')
#通過pyquery的方式處理網頁內容,類似用beautifulsoup,但是pyquery和jQuery的方法類似,找到公眾號主頁地址
returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')
defget_selenium_js_html(self,wx_url):
'執行js渲染內容,並返回渲染後的html內容'
browser=webdriver.PhantomJS()
browser.get(wx_url)
time.sleep(3)
#執行js得到整個dom
html=browser.execute_script("returndocument.documentElement.outerHTML")
returnhtml
defparse_wx_articles_by_html(self,selenium_html):
'從selenium_html中解析出微信公眾號文章'
doc=pq(selenium_html)
returndoc('div[class="weui_msg_card"]')
defswitch_arctiles_to_list(self,articles):
'把articles轉換成數據字典'
articles_list=[]
i=1
ifarticles:
forarticleinarticles.items():
self.log(u'開始整合(%d/%d)'%(i,len(articles)))
articles_list.append(self.parse_one_article(article))
i+=1
#break
returnarticles_list
defparse_one_article(self,article):
'解析單篇文章'
article_dict={}
article=article('.weui_media_box[id]')
title=article('h4[class="weui_media_title"]').text()
self.log('標題是:%s'%title)
url='http://mp.weixin.qq.com'+article('h4[class="weui_media_title"]').attr('hrefs')
self.log('地址為:%s'%url)
summary=article('.weui_media_desc').text()
self.log('文章簡述:%s'%summary)
date=article('.weui_media_extra_info').text()
self.log('發表時間為:%s'%date)
pic=self.parse_cover_pic(article)
content=self.parse_content_by_url(url).html()
contentfiletitle=self.kw+'/'+title+'_'+date+'.html'
self.save_content_file(contentfiletitle,content)
return{
'title':title,
'url':url,
'summary':summary,
'date':date,
'pic':pic,
'content':content
}
defparse_cover_pic(self,article):
'解析文章封面圖片'
pic=article('.weui_media_hd').attr('style')
p=re.compile(r'background-image:url(.∗?)')
rs=p.findall(pic)
self.log('封面圖片是:%s'%rs[0]iflen(rs)>0else'')
returnrs[0]iflen(rs)>0else''
defparse_content_by_url(self,url):
'獲取文章詳情內容'
page_html=self.get_selenium_js_html(url)
returnpq(page_html)('#js_content')
defsave_content_file(self,title,content):
'頁面內容寫入文件'
withopen(title,'w')asf:
f.write(content)
defsave_file(self,content):
'數據寫入文件'
withopen(self.kw+'/'+self.kw+'.txt','w')asf:
f.write(content)
deflog(self,msg):
'自定義log函數'
printu'%s:%s'%(time.strftime('%Y-%m-%d%H:%M:%S'),msg)
defneed_verify(self,selenium_html):
'有時候對方會封鎖ip,這里做一下判斷,檢測html中是否包含id=verify_change的標簽,有的話,代表被重定向了,提醒過一陣子重試'
returnpq(selenium_html)('#verify_change').text()!=''
defcreate_dir(self):
'創建文件夾'
ifnotos.path.exists(self.kw):
os.makedirs(self.kw)
defrun(self):
'爬蟲入口函數'
#Step0:創建公眾號命名的文件夾
self.create_dir()
#Step1:GET請求到搜狗微信引擎,以微信公眾號英文名稱作為查詢關鍵字
self.log(u'開始獲取,微信公眾號英文名為:%s'%self.kw)
self.log(u'開始調用sougou搜索引擎')
sougou_search_html=self.get_search_result_by_kw()
#Step2:從搜索結果頁中解析出公眾號主頁鏈接
self.log(u'獲取sougou_search_html成功,開始抓取公眾號對應的主頁wx_url')
wx_url=self.get_wx_url_by_sougou_search_html(sougou_search_html)
self.log(u'獲取wx_url成功,%s'%wx_url)
#Step3:Selenium+PhantomJs獲取js非同步載入渲染後的html
self.log(u'開始調用selenium渲染html')
selenium_html=self.get_selenium_js_html(wx_url)
#Step4:檢測目標網站是否進行了封鎖
ifself.need_verify(selenium_html):
self.log(u'爬蟲被目標網站封鎖,請稍後再試')
else:
#Step5:使用PyQuery,從Step3獲取的html中解析出公眾號文章列表的數據
self.log(u'調用selenium渲染html完成,開始解析公眾號文章')
articles=self.parse_wx_articles_by_html(selenium_html)
self.log(u'抓取到微信文章%d篇'%len(articles))
#Step6:把微信文章數據封裝成字典的list
self.log(u'開始整合微信文章數據為字典')
articles_list=self.switch_arctiles_to_list(articles)
#Step7:把Step5的字典list轉換為Json
self.log(u'整合完成,開始轉換為json')
data_json=json.mps(articles_list)
#Step8:寫文件
self.log(u'轉換為json完成,開始保存json數據到文件')
self.save_file(data_json)
self.log(u'保存完成,程序結束')
#main
if__name__=='__main__':
gongzhonghao=raw_input(u'輸入要爬取的公眾號')
ifnotgongzhonghao:
gongzhonghao='python6359'
weixin_spider(gongzhonghao).run()
#!/usr/bin/python
#coding:utf-8
[python]view plain
3.獲取公眾號地址
從獲取到的網頁內容中,得到公眾號主頁地址, 這一步驟有很多方法, beautifulsoup、webdriver,直接使用正則,pyquery等都可以
這里使用的是pyquery的方法來查找公眾號主頁入口地址
[python]view plain
4.獲取公眾號主頁的文章列表
首先需要載入公眾號主頁,這里用的是phantomjs+webdriver, 因為這個主頁的內容需要JS 渲染載入,採用之前的方法只能獲得靜態的網頁內容
[python]view plain
得到主頁內容之後,獲取文章列表,這個文章列表中有我們需要的內容
[python]view plain
5.解析每一個文章列表,獲取我們需要的信息
6.處理對應的內容
包括文章名字,地址,簡介,發表時間等
7.保存文章內容
以html的格式保存到本地
同時將上一步驟的內容保存成excel 的格式
8.保存json數據
這樣,每一步拆分完,爬取公眾號的文章就不是特別難了。
三、源碼
第一版源碼如下:
[python]view plain
第二版代碼:
對代碼進行了一些優化和整改,主要:
1.增加了excel存貯
2.對獲取文章內容規則進行修改
3.豐富了注釋
本程序已知缺陷: 如果公眾號的文章內容包括視視頻,可能會報錯。
[python]view plain
Ⅳ Python爬取知乎與我所理解的爬蟲與反爬蟲
關於知乎驗證碼登陸的問題,用到了Python上一個重要的圖片處理庫PIL,如果不行,就把圖片存到本地,手動輸入。
通過對知乎登陸是的抓包,可以發現登陸知乎,需要post三個參數,一個是賬號,一個是密碼,一個是xrsf。
這個xrsf隱藏在表單裡面,每次登陸的時候,應該是伺服器隨機產生一個字元串。所有,要模擬登陸的時候,必須要拿到xrsf。
用chrome (或者火狐 httpfox 抓包分析)的結果:
所以,必須要拿到xsrf的數值,注意這是一個動態變化的參數,每次都不一樣。
拿到xsrf,下面就可以模擬登陸了。
使用requests庫的session對象,建立一個會話的好處是,可以把同一個用戶的不同請求聯系起來,直到會話結束都會自動處理cookies。
注意:cookies 是當前目錄的一個文件,這個文件保存了知乎的cookie,如果是第一個登陸,那麼當然是沒有這個文件的,不能通過cookie文件來登陸。必須要輸入密碼。
這是登陸的函數,通過login函數來登陸,post 自己的賬號,密碼和xrsf 到知乎登陸認證的頁面上去,然後得到cookie,將cookie保存到當前目錄下的文件裡面。下次登陸的時候,直接讀取這個cookie文件。
這是cookie文件的內容
以下是源碼:
運行結果:
https://github.com/zhaozhengcoder/Spider/tree/master/spider_hu
反爬蟲最基本的策略:
爬蟲策略:
這兩個都是在http協議的報文段的檢查,同樣爬蟲端可以很方便的設置這些欄位的值,來欺騙伺服器。
反爬蟲進階策略:
1.像知乎一樣,在登錄的表單裡面放入一個隱藏欄位,裡面會有一個隨機數,每次都不一樣,這樣除非你的爬蟲腳本能夠解析這個隨機數,否則下次爬的時候就不行了。
2.記錄訪問的ip,統計訪問次數,如果次數太高,可以認為這個ip有問題。
爬蟲進階策略:
1.像這篇文章提到的,爬蟲也可以先解析一下隱藏欄位的值,然後再進行模擬登錄。
2.爬蟲可以使用ip代理池的方式,來避免被發現。同時,也可以爬一會休息一會的方式來降低頻率。另外,伺服器根據ip訪問次數來進行反爬,再ipv6沒有全面普及的時代,這個策略會很容易造成誤傷。(這個是我個人的理解)。
通過Cookie限制進行反爬蟲:
和Headers校驗的反爬蟲機制類似,當用戶向目標網站發送請求時,會再請求數據中攜帶Cookie,網站通過校驗請求信息是否存在Cookie,以及校驗Cookie的值來判定發起訪問請求的到底是真實的用戶還是爬蟲,第一次打開網頁會生成一個隨機cookie,如果再次打開網頁這個Cookie不存在,那麼再次設置,第三次打開仍然不存在,這就非常有可能是爬蟲在工作了。
反爬蟲進進階策略:
1.數據投毒,伺服器在自己的頁面上放置很多隱藏的url,這些url存在於html文件文件裡面,但是通過css或者js使他們不會被顯示在用戶看到的頁面上面。(確保用戶點擊不到)。那麼,爬蟲在爬取網頁的時候,很用可能取訪問這個url,伺服器可以100%的認為這是爬蟲乾的,然後可以返回給他一些錯誤的數據,或者是拒絕響應。
爬蟲進進階策略:
1.各個網站雖然需要反爬蟲,但是不能夠把網路,谷歌這樣的搜索引擎的爬蟲給幹了(幹了的話,你的網站在網路都說搜不到!)。這樣爬蟲應該就可以冒充是網路的爬蟲去爬。(但是ip也許可能被識破,因為你的ip並不是網路的ip)
反爬蟲進進進階策略:
給個驗證碼,讓你輸入以後才能登錄,登錄之後,才能訪問。
爬蟲進進進階策略:
圖像識別,機器學習,識別驗證碼。不過這個應該比較難,或者說成本比較高。
參考資料:
廖雪峰的python教程
靜覓的python教程
requests庫官方文檔
segmentfault上面有一個人的關於知乎爬蟲的博客,找不到鏈接了
Ⅳ 使用python3 requests和bs4進行爬蟲(二)爬取文章
為了做到更優雅,這次拋棄了urllib庫的引用,使用requests和beautifulsoup搭配的方式進行
首先構建一個頃嘩請求並且響應它
然後呢到上找一篇文章試試手,看一下網頁源碼找到文章的div
以及找到文章內容,仔細看看內容還挺不錯雀裂行哈哈
可以發現所有的內容都在p標簽裡面,那麼源宴接下來就簡單多了只需要
f5運行一下
最後使用codecs庫來進行文件操作將文章保存到本地
沒錯使用上requests和bs4之後爬取文章的工作是那麼的輕松呢
效果圖
Ⅵ Python中的爬蟲框架有哪些呢
實現爬蟲技術的編程環境有很多種,Java、Python、C++等都可以用來爬蟲。但很多人選擇Python來寫爬蟲,為什麼呢?因為Python確實很適合做爬蟲,豐富的第三方庫十分強大,簡單幾行代碼便可實現你想要的功能。更重要的,Python也是數據挖掘和分析的好能手。那麼,Python爬蟲一般用什麼框架比較好?
一般來講,只有在遇到比較大型的需求時,才會使用Python爬蟲框架。這樣的做的主要目的,是為了方便管理以及擴展。本文我將向大家推薦十個Python爬蟲框架。
1、Scrapy:Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。它是很強大的爬蟲框架,可以滿足簡單的頁面爬取,比如可以明確獲知url pattern的情況。用這個框架可以輕松爬下來如亞馬遜商品信息之類的數據。但是對於稍微復雜一點的頁面,如weibo的頁面信息,這個框架就滿足不了需求了。它的特性有:HTML, XML源數據 選擇及提取 的內置支持;提供了一系列在spider之間共享的可復用的過濾器(即 Item Loaders),對智能處理爬取數據提供了內置支持。
2、Crawley:高速爬取對應網站的內容,支持關系和非關系資料庫,數據可以導出為JSON、XML等。
3、Portia:是一個開源可視化爬蟲工具,可讓使用者在不需要任何編程知識的情況下爬取網站!簡單地注釋自己感興趣的頁面,Portia將創建一個蜘蛛來從類似的頁面提取數據。簡單來講,它是基於scrapy內核;可視化爬取內容,不需要任何開發專業知識;動態匹配相同模板的內容。
4、newspaper:可以用來提取新聞、文章和內容分析。使用多線程,支持10多種語言等。作者從requests庫的簡潔與強大得到靈感,使用Python開發的可用於提取文章內容的程序。支持10多種語言並且所有的都是unicode編碼。
5、Python-goose:Java寫的文章提取工具。Python-goose框架可提取的信息包括:文章主體內容、文章主要圖片、文章中嵌入的任何Youtube/Vimeo視頻、元描述、元標簽。
6、Beautiful Soup:名氣大,整合了一些常用爬蟲需求。它是一個可以從HTML或XML文件中提取數據的Python庫。它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間。Beautiful Soup的缺點是不能載入JS。
7、mechanize:它的優點是可以載入JS。當然它也有缺點,比如文檔嚴重缺失。不過通過官方的example以及人肉嘗試的方法,還是勉強能用的。
8、selenium:這是一個調用瀏覽器的driver,通過這個庫你可以直接調用瀏覽器完成某些操作,比如輸入驗證碼。Selenium是自動化測試工具,它支持各種瀏覽器,包括 Chrome,Safari,Firefox等主流界面式瀏覽器,如果在這些瀏覽器裡面安裝一個 Selenium 的插件,可以方便地實現Web界面的測試. Selenium支持瀏覽器驅動。Selenium支持多種語言開發,比如 Java,C,Ruby等等,PhantomJS 用來渲染解析JS,Selenium 用來驅動以及與Python的對接,Python進行後期的處理。
9、cola:是一個分布式的爬蟲框架,對於用戶來說,只需編寫幾個特定的函數,而無需關注分布式運行的細節。任務會自動分配到多台機器上,整個過程對用戶是透明的。項目整體設計有點糟,模塊間耦合度較高。
10、PySpider:一個國人編寫的強大的網路爬蟲系統並帶有強大的WebUI。採用Python語言編寫,分布式架構,支持多種資料庫後端,強大的WebUI支持腳本編輯器,任務監視器,項目管理器以及結果查看器。Python腳本控制,可以用任何你喜歡的html解析包。
Ⅶ 如何利用爬蟲爬微信公眾號的內容
過程很繁瑣,步驟如下:
1、寫按鍵精靈腳本,在手機上自動點擊公號文章列表頁,也就是「查看歷史消息」;
2、使用fiddler代理劫持手機端的訪問,將網址轉發到本地用php寫的網頁;
3、在php網頁上將接收到的網址備份到資料庫;
4、用python從資料庫取出網址,然後進行正常的爬取。
如果只是想爬取文章內容,似乎並沒有訪問頻率限制,但如果想抓取閱讀數、點贊數,超過一定頻率後,返回就會變為空值,我設定的時間間隔為10秒,可以正常抓取,這種頻率下,一個小時只能抓取360條,已經沒什麼實際意義了。
微信公眾號數據儲存
1、騰訊不對你在本服務中相關數據的刪除或儲存失敗負責。
2、騰訊有權根據實際情況自行決定單個用戶在本服務中數據的最長儲存期限,並在伺服器上為其分配數據最大存儲空間等。你可根據自己的需要自行備份本服務中的相關數據。
3、如果你停止使用本服務或服務被終止或取消,騰訊可以從伺服器上永久地刪除你的數據。服務停止、終止或取消後,騰訊沒有義務向你返還任何數據。
Ⅷ 想用Python寫個爬蟲爬取某個網站的文章及評論
既然能寫出這么多,說明還是會動手的陵櫻李。想快速的實現的話,就先在網上看一下簡單的例子,照著例子自己動手寫一遍。理解函數怎麼用,做什麼!然頌高後模仿自己這一個,差不多了,就開始舉一反三尺遲來寫你想實現的。
Ⅸ 如何利用python寫爬蟲程序
利用python寫爬蟲程序的方法:穗腔
1、先分析網站內容,紅色部芹族閉分即是網站文章內容div。
Ⅹ 如何用Python爬蟲獲取那些價值博文
過程大體分為以下幾步:
1. 找到爬取的目標網址;
2. 分析網頁,找到自已想要保存的信息,這里我們主要保存是博客的文章內容;
3. 清洗整理爬取下來的信息,保存在本地磁碟。
打開csdn的網頁,作為一個示例,我們隨機打開一個網頁:
http://blog.csdn.net/u013088062/article/list/1。
可以看到,博主對《C++卷積神經網路》和其它有關機計算機方面的文章都寫得不錯。
1#-*-coding:UTF-8-*-
2importre
3importurllib2
4importsys
5#目的:讀取博客文章,記錄標題,用Htnl格式保存存文章內容
6#版本:python2.7.13
7#功能:讀取網頁內容
8classGetHtmlPage():
9#注意大小寫
10def__init__(self,strPage):
11self.strPapge=strPage
12#獲取網頁
13defGetPage(self):
14req=urllib2.Request(self.strPapge)#建立頁面請求
15rep=req.add_header("User-Agent","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/38.0.2125.122Safari/537.36SE2.XMetaSr1.0")
16try:
17cn=urllib2.urlopen(req)#網頁請求
18page=cn.read()#讀網頁
19uPage=page.decode("utf-8")#網頁編碼
20cn.close()
21returnuPage
22excepturllib2.URLError,e:#捕獲異常
23print'URLError:',e.code
24return
25excepturllib2.HTTPError,e:#捕獲異常
26print'HTTPError:'+e.reason
27return
28returnrePage
29#正則表達式,獲取想要的內容
30classRePage():
31#正則表達式提取內容,返回鏈表
32defGetReText(self,page,recode):
33rePage=re.findall(recode,page,re.S)
34returnrePage
35#保存文本
36classSaveText():
37defSave(self,text,tilte):
38try:
39t="blog\"+tilte+".html"
40f=file(t,"a")
41f.write(text)
42f.close()
43exceptIOError,e:
44printe.message
45if__name__=="__main__":
46s=SaveText()
47#文件編碼
48#字元正確解碼
49reload(sys)
50sys.setdefaultencoding("utf-8")#獲得系統的默認編碼
51#獲取網頁
52page=GetHtmlPage("http://blog.csdn.net/u013088062/article/list/1")
53htmlPage=page.GetPage()
54#提取內容
55reServer=RePage()
56reBlog=reServer.GetReText(htmlPage,r'.*?(s.+?)')#獲取網址鏈接和標題
57#再向下獲取正文
58forrefinreBlog:
59pageHeard="http://blog.csdn.net/"#加鏈接頭
60strPage=pageHeard+ref[0]
61tilte=ref[1].replace('[置頂]',"")#用替換的功能去除雜的英文
62tilte=tilte.replace("
","").lstrip().rstrip()
63#獲取正文
64htmlPage=GetHtmlPage(strPage)
65htmlPageData=htmlPage.GetPage()
66reBlogText=reServer.GetReText(htmlPageData,'(.+?)')
67#保存文件
68fors1inreBlogText:
69s1='
'+s1
70s.Save(s1,tilte)