⑴ 如何用python爬取網站數據
這里簡單介紹一下吧,以抓取網站靜態、動態2種數據為慧返拍例,實驗環境win10+python3.6+pycharm5.0,主要內容如下:
抓取網站靜態數據(數據在網頁源碼中):以糗事網路網站數據為例
1.這里假設我們抓取的數據如下,主要包括用戶昵稱、內容、好笑數和評論數這4個欄位,如下:
對應的網頁源碼如下,包含我們所需要的數據:
2.對應網頁結構,主要代碼如下,很簡單,主要用到requests+BeautifulSoup,其中requests用於請求頁面,BeautifulSoup用於解析頁面:
程序運行截圖如下,已經成功爬取到數據:
抓取網站動態數據(數據不在網頁源碼中,json等文件中):以人人貸網站數據為例
1.這里假設我們爬取的是債券數據,主要包括年利率世型、借款標題、期限、金額和進度這5個欄位信息,截圖如下:
打開網頁源碼中,可以發現數據不在網頁源碼中,按F12抓包分析時,才發現在一個json文件中,如下:
2.獲取到json文件的url後,我們就可以爬取對應數據了,這里使用的包與上面類似,因為是json文件,所以還用了json這個包(解析json),主要內容如下:
程序運行截圖如下,前羨已經成功抓取到數據:
至此,這里就介紹完了這2種數據的抓取,包括靜態數據和動態數據。總的來說,這2個示例不難,都是入門級別的爬蟲,網頁結構也比較簡單,最重要的還是要會進行抓包分析,對頁面進行分析提取,後期熟悉後,可以藉助scrapy這個框架進行數據的爬取,可以更方便一些,效率更高,當然,如果爬取的頁面比較復雜,像驗證碼、加密等,這時候就需要認真分析了,網上也有一些教程可供參考,感興趣的可以搜一下,希望以上分享的內容能對你有所幫助吧。
⑵ python3 怎麼爬取新聞網站
從門戶網站爬取新聞,將新聞標題,作者,時間,內容保存到本地txt中。
importre#正則表達式
importbs4#BeautifulSoup4解析模塊
importurllib2#網路訪問模塊
importNews#自己定義的新聞結構
importcodecs#解決編碼問題的關鍵,使用codecs.open打開文件
importsys#1解決不同頁面編碼問題
其中bs4需要自己裝一下,安裝方法可以參考:Windows命令行下pip安裝python whl包
程序:
#coding=utf-8
importre#正則表達式
importbs4#BeautifulSoup4解析模塊
importurllib2#網路訪問模塊
importNews#自己定義的新聞結構
importcodecs#解決編碼問題的關鍵,使用codecs.open打開文件
importsys#1解決不同頁面編碼問題
reload(sys)#2
sys.setdefaultencoding('utf-8')#3
#從首頁獲取所有鏈接
defGetAllUrl(home):
html=urllib2.urlopen(home).read().decode('utf8')
soup=bs4.BeautifulSoup(html,'html.parser')
pattern='http://w+.jia..com/article/w+'
links=soup.find_all('a',href=re.compile(pattern))
forlinkinlinks:
url_set.add(link['href'])
defGetNews(url):
globalNewsCount,MaxNewsCount#全局記錄新聞數量
whilelen(url_set)!=0:
try:
#獲取鏈接
url=url_set.pop()
url_old.add(url)
#獲取代碼
html=urllib2.urlopen(url).read().decode('utf8')
#解析
soup=bs4.BeautifulSoup(html,'html.parser')
pattern='http://w+.jia..com/article/w+'#鏈接匹配規則
links=soup.find_all('a',href=re.compile(pattern))
#獲取URL
forlinkinlinks:
iflink['href']notinurl_old:
url_set.add(link['href'])
#獲取信息
article=News.News()
article.url=url#URL信息
page=soup.find('div',{'id':'page'})
article.title=page.find('h1').get_text()#標題信息
info=page.find('div',{'class':'article-info'})
article.author=info.find('a',{'class':'name'}).get_text()#作者信息
article.date=info.find('span',{'class':'time'}).get_text()#日期信息
article.about=page.find('blockquote').get_text()
pnode=page.find('div',{'class':'article-detail'}).find_all('p')
article.content=''
fornodeinpnode:#獲取文章段落
article.content+=node.get_text()+' '#追加段落信息
SaveNews(article)
printNewsCount
break
exceptExceptionase:
print(e)
continue
else:
print(article.title)
NewsCount+=1
finally:
#判斷數據是否收集完成
ifNewsCount==MaxNewsCount:
break
defSaveNews(Object):
file.write("【"+Object.title+"】"+" ")
file.write(Object.author+" "+Object.date+" ")
file.write(Object.content+" "+" ")
url_set=set()#url集合
url_old=set()#爬過的url集合
NewsCount=0
MaxNewsCount=3
home='http://jia..com/'#起始位置
GetAllUrl(home)
file=codecs.open("D:\test.txt","a+")#文件操作
forurlinurl_set:
GetNews(url)
#判斷數據是否收集完成
ifNewsCount==MaxNewsCount:
break
file.close()
新聞文章結構
#coding:utf-8
#文章類定義
classNews(object):
def__init__(self):
self.url=None
self.title=None
self.author=None
self.date=None
self.about=None
self.content=None
對爬取的文章數量就行統計。
⑶ Python爬網頁
1、網路爬蟲基本原理
傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定
停止條件。聚焦爬蟲的工作流程較為復雜,需要根據一定的網頁分析演算法過濾與主題無關的鏈接,保留有用的鏈接並將其放入等待抓取的URL隊列。然後,它將根
據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重復上述過程,直到達到系統的某一條件時停止。
2、設計基本思路
正如你所說,先到微博登陸頁面模擬登錄,抓取頁面,從頁面中找出所有URL,選擇滿足要求的URL文本說明,模擬點擊這些URL,重復上面的抓取動作,直到滿足要求退出。
3、現有的項目
google project網站有一個項目叫做sinawler,就是專門的新浪微博爬蟲,用來抓取微博內容。網站上不去,這個你懂的。不過可以網路一下「python編寫的新浪微博爬蟲(現在的登陸方法見新的一則微博)「,可以找到一個參考的源碼,他是用python2寫的。如果用python3寫,其實可以使用urllib.request模擬構建一個帶cookies的瀏覽器,省去對cookies的處理,代碼可以更加簡短。
4、此外
看下網路爬蟲的網路,裡面很多比較深入的內容,比如演算法分析、策略體系,會大有幫助,從理論角度提升代碼的技術層次。
⑷ Python 爬蟲的入門教程有哪些值得推薦的
Python 爬蟲的入門教程有很多值得推薦的,以下是一些比較受歡迎和推薦的教程:
1.《精通 Python 網路爬蟲》:這本書是一本入門級的 Python 爬蟲教程,適合初學者學習。
Python3 網路爬蟲實戰:這是一個在線教程,詳細介紹了 Python 爬蟲的基礎知識,包括爬蟲的原理、如何使用 Python 爬取網頁、如何使用正則表達式和 XPath 解析網頁等。
Python 爬蟲指南:這是一個在線教程,通過幾個簡單的例子來介紹 Python 爬蟲的基礎知識。
網路爬蟲實戰:這是一個在線課程,通過幾個實際案例來介紹 Python 爬蟲的基礎知識和進階技巧。
Python 爬蟲實戰:這是一個在線課程,通過幾個實際案例來介紹 Python 爬蟲的基礎知識和進階技巧。
以上是一些比較受歡迎和推薦的 Python 爬蟲入門教程,你可以根據自己的需求和學習進度選擇適合自己的教程。
bilibili上也有一些視頻教程。
⑸ 如何使用python3爬取1000頁百度百科條目
1 問題描述
起始頁面 ython包含許多指向其他詞條的頁面。悄隱通過頁面之間的鏈接訪問1000條網路詞條。
對啟悶廳每個詞條,獲取其標題和簡介。
可以看出,其他詞條的格式都遵循hcom/item/xxx的形式
3 實現
# coding=utf-8from urllib import requestfrom bs4 import BeautifulSoupimport reimport tracebackimport time
url_new = set()
url_old = set()
start_url = 'httpm/item/python'max_url = 1000def add_url(url):
if len(url_new) + len(url_old) > 1000: return
if url not in url_old and url not in url_new:
url_new.add(url)def get_url():
url = url_new.pop()
url_old.add(url) return urldef parse_title_summary(page):
soup = BeautifulSoup(page, 'html.parser')
node = soup.find('h1')
title = node.text
node = soup.find('div', class_='lemma-summary')
summary = node.text return title, summarydef parse_url(page):
soup = BeautifulSoup(page, 'html.parser')
links = soup.findAll('a', href=re.compile(r'/item/'))
res = set()
keprefix = 'htt..com'
for i in links:
res.add(keprefix + i['罩昌href']) return resdef write2log(text, name='d:/ke-urllib.log'):
with open(name, 'a+', encoding='utf-8') as fp:
fp.write('
')
fp.write(text)if __name__ == '__main__':
url_new.add(start_url) print('working')
time_begin=time.time()
count = 1
while url_new:
url = get_url() try:
resp = request.urlopen(url)
text = resp.read().decode()
write2log('.'.join(parse_title_summary(text)))
urls = parse_url(text) for i in urls:
add_url(i) print(str(count), 'ok')
count += 1
except:
traceback.print_exc() print(url)
time_end=time.time() print('time elapsed: ', time_end - time_begin) print('the end.')
輸出結果
working1 ok
略983 ok984 ok
time elapsed: 556.4766345024109the end.
將urllib替換為第三方庫requests:
pip install requests
略if __name__ == '__main__':
url_new.add(start_url) print('working')
time_begin = time.time()
count = 1
while url_new:
url = get_url() try: with requests.Session() as s:
resp = s.get(url)
text = resp.content.decode() # 默認'utf-8'
write2log('.'.join(parse_title_summary(text)))
urls = parse_url(text) for i in urls:
add_url(i) print(str(count), 'ok')
count += 1
except:
traceback.print_exc() print(url)
time_end = time.time() print('time elapsed: ', time_end - time_begin) print('the end.')
輸出
略986 ok987 ok988 ok989 ok
time elapsed: 492.8088216781616the end.
一個通用的爬蟲架構包括如下四部分:
調度器
URL管理器
網頁下載器
網頁解析器
從以上函數式的寫法也可以看出了。
下面是面向對象的寫法。
1、spider main
2、URL manager
3、html downloder
4、html parser
5、 html outputer
⑹ python爬蟲如何分析一個將要爬取的網站
爬取網頁數據,需要一些工具,比如requests,正則表達式,bs4等,解析網頁首推bs4啊,可以通過標簽和節點抓取扒拍數據。
正巧簡悶,我最近發布了一篇文章就是抓取網頁數據分析的,有完整的抓取步驟,你可以看一下?不好意思給自己打了一下廣春咐羨告?