手把手带你爬虫 | 爬取语录大全
生活随笔
收集整理的這篇文章主要介紹了
手把手带你爬虫 | 爬取语录大全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目標
爬取語錄,批量下載到本地。
項目準備
軟件:Pycharm
第三方庫:requests,fake_useragent,re,lxml
網站地址:http://www.yuluju.com
網站分析
打開網站。
有很多分類,不同類型的語錄。?
點擊愛情語錄,發現上方網址變化為http://www.yuluju.com/aiqingyulu/
點擊搞笑語錄,也會發生類似的變化。
判斷是否為靜態網頁。
有頁碼跳轉一般為靜態網頁。Ctrl+U查看源代碼,Ctrl+F調出搜索框,輸入一些網頁上出現的文字。
反爬分析
同一個ip地址去多次訪問會面臨被封掉的風險,這里采用fake_useragent,產生隨機的User-Agent請求頭進行訪問。
每一頁的鏈接分析
第一頁:http://www.yuluju.com/aiqingyulu/list_18_1.html 第二頁:http://www.yuluju.com/aiqingyulu/list_18_2.html 第三頁:http://www.yuluju.com/aiqingyulu/list_18_3.html可以發現,每頁的變化會隨著數字變化。當然這里分析的是愛情語錄這一欄目,其它的也類似。
代碼實現
1.導入相對應的第三方庫,定義一個class類繼承object,定義init方法繼承self,主函數main繼承self。
import??requests from?fake_useragent?import?UserAgent from?lxml?import?etree class?yulu(object):def?__init__(self):self.url?=?'http://www.yuluju.com'ua?=?UserAgent(verify_ssl=False)#隨機產生user-agentfor?i?in?range(1,?100):self.headers?=?{'User-Agent':?ua.random}def?mian(self):pass if?__name__?==?'__main__':spider?=?yulu()spider.main()2.交互界面
print('?????1.勵志語錄\n''2.愛情語錄\n''3.搞笑語錄\n''4.人生語錄\n''5.情感語錄\n''6.經典語錄\n''7.傷感語錄\n''8.名人語錄\n''9.心情語錄\n')select=int(input('請輸入您的選擇:'))if?(select==1):url=self.url+'lizhimingyan/list_1_{}.html'elif?(select==2):url?=?self.url?+?'aiqingyulu/list_18_{}.html'elif?(select==3):url?=?self.url?+?'gaoxiaoyulu/list_19_{}.html'elif?(select==4):url=self.url+'renshenggeyan/list_14_{}.html'elif?(select==5):url=self.url+'qingganyulu/list_23_{}.html'elif?(select==6):url=self.url+'jingdianyulu/list_12_{}.html'elif?(select==7):url=self.url+'shangganyulu/list_21_{}.html'elif?(select==8):url=self.url+'mingrenmingyan/list_2_{}.html'else:url=self.url+'xinqingyulu/list_22_{}.html'3.發送請求,獲取網頁。
????def?get_html(self,url):response=requests.get(url,headers=self.headers)html=response.content.decode('gb2312')#經過測試這里是'gb2312'return?html4.解析網頁,獲取文本信息。
????def?parse_html(self,html):#獲取每頁中的鏈接地址和標題datas=re.compile('<a?href="(.*?)"?class="title"?target="_blank">(.*?)</a>').findall(html)for?data?in?datas:host='http://www.yuluju.com'+data[0]res=requests.get(host,headers=self.headers)con=res.content.decode('gb2312')target=etree.HTML(con)#獲取文本內容results=target.xpath('//div[@class="content"]/div/div/span/text()')filename=data[1]#保存本地with?open('F:/pycharm文件/document/'+filename+'.txt','a',encoding='utf-8')as?f:for?result?in?results:f.write(result+'\n')5.獲取多頁及主函數調用。
????def?main(self):print('1.勵志語錄\n''2.愛情語錄\n''3.搞笑語錄\n''4.人生語錄\n''5.情感語錄\n''6.經典語錄\n''7.傷感語錄\n''8.名人語錄\n''9.心情語錄\n')select=int(input('請輸入您的選擇:'))if?(select==1):url=self.url+'lizhimingyan/list_1_{}.html'elif?(select==2):url?=?self.url?+?'aiqingyulu/list_18_{}.html'elif?(select==3):url?=?self.url?+?'gaoxiaoyulu/list_19_{}.html'elif?(select==4):url=self.url+'renshenggeyan/list_14_{}.html'elif?(select==5):url=self.url+'qingganyulu/list_23_{}.html'elif?(select==6):url=self.url+'jingdianyulu/list_12_{}.html'elif?(select==7):url=self.url+'shangganyulu/list_21_{}.html'elif?(select==8):url=self.url+'mingrenmingyan/list_2_{}.html'else:url=self.url+'xinqingyulu/list_22_{}.html'start?=?int(input('輸入開始:'))end?=?int(input('輸入結束頁:'))for?page?in?range(start,?end?+?1):print('第%s頁開始:...'?%?page)newUrl=url.format(page)html=self.get_html(newUrl)self.parse_html(html)print('第%s頁爬取完成!'%page)效果顯示
打開文件目錄:
爬取其它欄目也是可以的,就不做演示了,都一樣。
完整代碼
import??requests from?fake_useragent?import?UserAgent import?re from?lxml?import?etree class?yulu(object):def?__init__(self):self.url='http://www.yuluju.com/'ua?=?UserAgent(verify_ssl=False)for?i?in?range(1,?100):self.headers?=?{'User-Agent':?ua.random}def?get_html(self,url):response=requests.get(url,headers=self.headers)html=response.content.decode('gb2312')return?htmldef?parse_html(self,html):datas=re.compile('<a?href="(.*?)"?class="title"?target="_blank">(.*?)</a>').findall(html)for?data?in?datas:host='http://www.yuluju.com'+data[0]res=requests.get(host,headers=self.headers)con=res.content.decode('gb2312')target=etree.HTML(con)results=target.xpath('//div[@class="content"]/div/div/span/text()')filename=data[1]with?open('F:/pycharm文件/document/'+filename+'.txt','a',encoding='utf-8')as?f:for?result?in?results:f.write(result+'\n')def?main(self):print('1.勵志語錄\n''2.愛情語錄\n''3.搞笑語錄\n''4.人生語錄\n''5.情感語錄\n''6.經典語錄\n''7.傷感語錄\n''8.名人語錄\n''9.心情語錄\n')select=int(input('請輸入您的選擇:'))if?(select==1):url=self.url+'lizhimingyan/list_1_{}.html'elif?(select==2):url?=?self.url?+?'aiqingyulu/list_18_{}.html'elif?(select==3):url?=?self.url?+?'gaoxiaoyulu/list_19_{}.html'elif?(select==4):url=self.url+'renshenggeyan/list_14_{}.html'elif?(select==5):url=self.url+'qingganyulu/list_23_{}.html'elif?(select==6):url=self.url+'jingdianyulu/list_12_{}.html'elif?(select==7):url=self.url+'shangganyulu/list_21_{}.html'elif?(select==8):url=self.url+'mingrenmingyan/list_2_{}.html'else:url=self.url+'xinqingyulu/list_22_{}.html'start?=?int(input('輸入開始:'))end?=?int(input('輸入結束頁:'))for?page?in?range(start,?end?+?1):print('第%s頁開始:...'?%?page)newUrl=url.format(page)html=self.get_html(newUrl)self.parse_html(html)print('第%s頁爬取完成!'%page) if?__name__?==?'__main__':spider?=?yulu()spider.main()推薦閱讀
平時都逛哪些技術網站?(程序員必備58個網站匯總)
肝!精心整理了 50 個數據源網站!
3種Python數據結構,13種創建方法,這個總結,超贊!
總結
以上是生活随笔為你收集整理的手把手带你爬虫 | 爬取语录大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python分析元旦旅游热门城市,告诉
- 下一篇: 爱了!爱了!Markdown 必备组合神