Ⅰ 如何在scrapy框架下,用python實現爬蟲自動跳轉頁面來抓去網頁內容
(1)一種是像我之前爬蟲新京報網的新聞,下一頁的url可以通過審查元素獲得,第一頁的網址是http://www.bjnews.com.cn/news/list-43-page-1.html
在第一頁的時候,下一頁按鈕的審查元素是
我們通過獲取next_pages = response.xpath('//div[@id="page"]/a[@class="next"]/@href').extract()[0]
,便可以得到下一頁的url,next_page = "http://www.bjnews.com.cn" + next_pages,
這一部分的完整代碼為:
page_link=set() #保存下一頁頁面url
content_link=set() #保存頁面內所有可獲得的url
rules={'page':LinkExtractor(allow=(r'^http://www.bjnews.com.cn/\w+/2016/\d{2}/\d{2}/\d{6}.html
))}
start_urls={'http://www.bjnews.com.cn/news/list-43-page-1.html'}
def parse(self, response):
#爬取一個頁面內的所有url鏈接
for link in self.rules['page'].extract_links(response):
if link.url not in self.content_link:
self.page_link.add(link.url)
yield scrapy.Request(link.url, callback=self.parse_item)
#自動獲取下一頁的url
next_pages = response.xpath('//div[@id="page"]/a[@class="next"]/@href').extract()[0]
if next_pages:
next_page = "http://www.bjnews.com.cn" + next_pages
self.page_link.add(next_page)
yield scrapy.Request(next_page, callback=self.parse)
(2)第二種情況,就是在下一頁的審查元素中沒有提供url鏈接,需要自己分析,在這里依然舉個例子,比如搜狐新聞http://news.sohu.com/guojixinwen.shtml,該頁中下一頁按鈕的審查元素是:
我們不能通過href來直接過得下一頁的url,需要自己手動獲得,那現在我們來分析
第二頁的url:http://news.sohu.com/guojixinwen_5230.shtml,第三頁的http://news.sohu.com/guojixinwen_5229.shtml,最後一頁的http://news.sohu.com/guojixinwen_5132.shtml,由此可以分析出這一共100頁的url,是http://news.sohu.com/guoneixinwen_"+i+".shtml",其中i是從5230到5132倒序排列的,也就是說通過for循環,就可以獲得這100頁的所有url,完整代碼如下:在這里給大家加一個新的方法的使用start_request,該方法就是子定義start_urls,把所有自定義的url放到page_link中,self.make_requests_from_url方法會自動獲取裡面的請求
Ⅱ 《用Python寫網路爬蟲》pdf下載在線閱讀,求百度網盤雲資源
《用Python寫網路爬蟲》([澳]理查德 勞森)電子書網盤下載免費在線閱讀
鏈接:
書名:用Python寫網路爬蟲
作者:[澳]理查德 勞森
譯者:李斌
豆瓣評分:7.2
出版社:人民郵電出版社
出版年份:2016-8-1
頁數:157
內容簡介:
作為一種便捷地收集網上信息並從中抽取出可用信息的方式,網路爬蟲技術變得越來越有用。使用Python這樣的簡單編程語言,你可以使用少量編程技能就可以爬取復雜的網站。
《用Python寫網路爬蟲》作為使用Python來爬取網路數據的傑出指南,講解了從靜態頁面爬取數據的方法以及使用緩存來管理伺服器負載的方法。此外,本書還介紹了如何使用AJAX URL和Firebug擴展來爬取數據,以及有關爬取技術的更多真相,比如使用瀏覽器渲染、管理cookie、通過提交表單從受驗證碼保護的復雜網站中抽取數據等。本書使用Scrapy創建了一個高級網路爬蟲,並對一些真實的網站進行了爬取。
《用Python寫網路爬蟲》介紹了如下內容:
通過跟蹤鏈接來爬取網站;
使用lxml從頁面中抽取數據;
構建線程爬蟲來並行爬取頁面;
將下載的內容進行緩存,以降低帶寬消耗;
解析依賴於javaScript的網站;
與表單和會話進行交互;
解決受保護頁面的驗證碼問題;
對AJAX調用進行逆向工程;
使用Scrapy創建高級爬蟲。
本書讀者對象
本書是為想要構建可靠的數據爬取解決方案的開發人員寫作的,本書假定讀者具有一定的Python編程經驗。當然,具備其他編程語言開發經驗的讀者也可以閱讀本書,並理解書中涉及的概念和原理。
作者簡介:
Richard Lawson來自澳大利亞,畢業於墨爾本大學計算機科學專業。畢業後,他創辦了一家專注於網路爬蟲的公司,為超過50個國家的業務提供遠程工作。他精通於世界語,可以使用漢語和韓語對話,並且積極投身於開源軟體。他目前在牛津大學攻讀研究生學位,並利用業余時間研發自主無人機。
Ⅲ 求一個python3爬蟲代碼,可以從小說網站上直接把小說的文字抄下來,並整合到一個新的文本里
frombs4importBeautifulSoup
fromrequests.
importre
importrequests
importos
defget_html_text(url):
try:
r=requests.get(url)
r.raise_for_status()
returnr.text
exceptRequestException:
returnNone
defget_chapter_names(html):
soup=BeautifulSoup(html,'lxml')
charpter=soup.select('.bg')
charpter_names=[]
forentryincharpter[1:]:
charpter_name=re.findall('<h2>(.*?)</h2>',str(entry))
file_name=re.findall('<ahref.*?>(.*?)</a>',str(entry))
ifcharpter_nameandfile_name:
fornameinfile_name:
name=name.split('')[0]
charpter_names.append(charpter_name[0]+'_'+name)
else:
pass
returnset(charpter_names)
defget_each_url(html):
soup=BeautifulSoup(html,'lxml')
urls=soup.select('ullia')
forurlinurls:
link=url.get('href')
text=url.text.split('')[0]
full_name=url.text.replace('?','')
yield{'url':link,'text':text,'full_name':full_name}
print(text)
defget_text(url):
r=requests.get(url)
r.encoding=r.apparent_encoding
soup=BeautifulSoup(r.text,'lxml')
items=soup.select('div.content-body')
item=re.findall(';(.*?);',items[0].text,re.S)
returnitem[0].encode()
defsave_to_file(url,text,full_name):
base_dir='mu'
path='{}\{}\{}'.format(os.getcwd(),base_dir,text)
ifnotos.path.exists(path):
try:
os.makedirs(path)
except:
pass
try:
withopen(path+'\'+full_name+'.txt','wb')asf:
f.write(get_text(url))
except:
pass
defmain():
url='http://seputu.com/'
html=get_html_text(url)
chapters=get_chapter_names(html)
forchapterinchapters:
foreachinget_each_url(html):
ifeach['text']==chapter.split('_')[-1]:
save_to_file(each['url'],chapter,each['full_name'])
if__name__=='__main__':
main()
Ⅳ 簡述第一文《為什麼選擇爬蟲,選擇python》
1 為什麼選擇爬蟲?要想論述這個問題,需要從網路爬蟲是什麼?學習爬蟲的原因是什麼?怎樣學習爬蟲來理清自己學習的目的,這樣才能更好地去研究爬蟲技術並堅持下來。
1.1 什麼是爬蟲:爬蟲通常指的是網路爬蟲,就是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。一般是根據定義的行為自動進行抓取,更智能的爬蟲會自動分析目標網站結構。它還有一些不常使用的名字。如:網路蜘蛛(Web spider)、螞蟻(ant)、自動檢索工具(automatic indexer)、網路疾走(WEB scutter)、網路機器人等。
1.2 學習爬蟲的原因:
1.2.1學習爬蟲是一件很有趣的事。我曾利用爬蟲抓過許多感興趣東西,興趣是最好的老師,感興趣的東西學的快、記的牢,學後有成就感。
@學習爬蟲,可以私人訂制一個搜索引擎,並且可以對搜索引擎的數據採集工作原理進行更深層次地理解。有的朋友希望能夠深層次地了解搜索引擎的爬蟲工作原理,或者希望自己能夠開發出一款私人搜索引擎,那麼此時,學習爬蟲是非常有必要的。簡單來說,我們學會了爬蟲編寫之後,就可以利用爬蟲自動地採集互聯網中的信息,採集回來後進行相應的存儲或處理,在需要檢索某些信息的時候,只需在採集回來的信息中進行檢索,即實現了私人的搜索引擎。當然,信息怎麼爬取、怎麼存儲、怎麼進行分詞、怎麼進行相關性計算等,都是需要我們進行設計的,爬蟲技術主要解決信息爬取的問題。
@學習爬蟲可以獲取更多的數據源。這些數據源可以按我們的目的進行採集,去掉很多無關數據。在進行大數據分析或者進行數據挖掘的時候,數據源可以從某些提供數據統計的網站獲得,也可以從某些文獻或內部資料中獲得,但是這些獲得數據的方式,有時很難滿足我們對數據的需求,而手動從互聯網中去尋找這些數據,則耗費的精力過大。此時就可以利用爬蟲技術,自動地從互聯網中獲取我們感興趣的數據內容,並將這些數據內容爬取回來,作為我們的數據源,從而進行更深層次的數據分析,並獲得更多有價值的信息。
@對於很多SEO從業者來說,學習爬蟲,可以更深層次地理解搜索引擎爬蟲的工作原理,從而可以更好地進行搜索引擎優化。既然是搜索引擎優化,那麼就必須要對搜索引擎的工作原理非常清楚,同時也需要掌握搜索引擎爬蟲的工作原理,這樣在進行搜索引擎優化時,才能知己知彼,百戰不殆。
@學習爬蟲更有錢景。爬蟲工程師是當前緊缺人才,並且薪資待遇普遍較高,所以,深層次地掌握這門技術,對於就業來說,是非常有利的。有些朋友學習爬蟲可能為了就業或者跳槽。從這個角度來說,爬蟲工程師方向也是不錯的選擇之一,因為目前爬蟲工程師的需求越來越大,而能夠勝任這方面崗位的人員較少,所以屬於一個比較緊缺的職業方向,並且隨著大數據時代的來臨,爬蟲技術的應用將越來越廣泛,在未來會擁有很好的發展空間。
除了以上為大家總結的4種常見的學習爬蟲的原因外,可能你還有一些其他學習爬蟲的原因,總之,不管是什麼原因,理清自己學習的目的,就可以更好地去研究一門知識技術,並堅持下來。
1.3 怎樣學習爬蟲:
1.3.1 選擇一門編程語言。入門爬蟲的前提肯定是需要學習一門編程語言,推薦使用Python 。2018年5月Python已排名第一,列為最受歡迎的語言。很多人將 Python 和爬蟲綁在一起,相比 Java , Php , Node 等靜態編程語言來說,Python 內部的爬蟲庫更加豐富,提供了更多訪問網頁的 API。寫一個爬蟲不需要幾十行,只需要 十幾行就能搞定。尤其是現在反爬蟲日漸嚴峻的情況下,如何偽裝自己的爬蟲尤為重要,例如 UA , Cookie , Ip 等等,Python 庫對其的封裝非常和諧,為此可以減少大部分代碼量。
1.3.2 學習爬蟲需要掌握的知識點。http相關知識,瀏覽器攔截、抓包;python的scrapy 、requests、BeautifulSoap等第三方庫的安裝、使用,編碼知識、bytes 和str類型轉換,抓取javascript 動態生成的內容,模擬post、get,header等,cookie處理、登錄,代理訪問,多線程訪問、asyncio 非同步,正則表達式、xpath,分布式爬蟲開發等。
1.3.3 學習爬蟲的基本方法。 理清楚爬蟲所需的知識體系,然後各個擊破;推薦先買一本有一定知名度的書便於系統的學習爬蟲的知識體系。剛開始學的時候,建議從基礎庫開始,有一定理解之後,才用框架爬取,因為框架也是用基礎搭建的,只不過集成了很多成熟的模塊,提高了抓取的效率,完善了功能。多實戰練習和總結實戰練習,多總結對方網站的搭建技術、網站的反爬機制,該類型網站的解析方法,破解對方網站的反爬技巧等。
2 為什麼選擇Python?
網路知道在這方面介紹的很多了,相比其它編程語言,我就簡答一下理由:
2.1 python是腳本語言。因為腳本語言與編譯語言的開發測試過程不同,可以極大的提高編程效率。作為程序員至少應該掌握一本通用腳本語言,而python是當前最流行的通用腳本語言。與python相似的有ruby、tcl、perl等少數幾種,而python被稱為腳本語言之王。
2.2 python擁有廣泛的社區。可以說,只要你想到的問題,只要你需要使用的第三方庫,基本上都是python的介面。
2.3 python開發效率高。同樣的任務,大約是java的10倍,c++的10-20倍。
2.4 python在科研上有大量的應用。大數據計算、模擬計算、科學計算都有很多的包。python幾乎在每個linux操作系統上都安裝有,大部分unix系統也都預設安裝,使用方便。
2.5 python有豐富和強大的獨立庫。它幾乎不依賴第三方軟體就可以完成大部分的系統運維和常見的任務開發;python幫助里還有許多例子代碼,幾乎拿過來略改一下就可以正式使用。