記錄一次簡單的Python爬蟲執行個體

來源:互聯網
上載者:User
本次的這篇文章主要是和大家分享了一篇關於記錄一次簡單的Python爬蟲執行個體 ,有需要的小夥伴可以看一下。

主要流程分為:

爬取、整理、儲存

1.其中用到幾個包,包括

requests 用於向網站發送請求,並獲得網頁代碼

BeautifulSoup4 用於處理獲得的網頁代碼,提取有效資訊

pandas 用於儲存資訊

其中在to_excel(‘docname.xlsx’)時,可能去要另外的包 openpyxl

import requestsfrom bs4 import BeautifulSoupimport reimport jsonimport pandasimport excelimport sqlite3# import openpyxl

2.以爬取新浪網址中各個新聞的責任編輯為例子

可以按照反向推算的方式確定def的functions

擷取到了當條新聞下的網頁網址後,如何獲得責任編輯?

d

ef getComments(url):    # 向url對應網址發送請求,擷取到的網頁內容儲存在res中    res=requests.get(url)    # 將res內容編碼,編碼的方式'utf-8'根據網頁的charset而定    res.encoding='utf-8'    # 因為需要處理res,因此將文本存入soup    # html.parser不清楚是幹嘛的    soup=BeautifulSoup(res.text,'html.parser')    # 根據所需要的內容,通過BS4的select選擇,得到數組,用[0]取出元素    # 因為是文本所以直接通過.text得到所需要的內容    return soup.select('.show_author')[0].text# 在soup.select('.link')[0]中,若為id則帶##                             若為class則帶.#                             其他的如a和h1等則無要求#其中需要層層select並取[0]#有些有多元素,則需通過for遍曆

ii) 根據首頁面如何獲得各條新聞網頁的網址

某行檔案是在json中發現,因此通過comments=requests.get(‘url’)再

jd=json.loads(comments.text.strip(‘var data=‘))

jd=[‘result’][‘count’][‘total’] ==>這裡為字典中的字典,可以從網頁檢查元素的preview中查看

==>可轉化為字典

其中要恢複成字典,左右兩頭多出了什麼就要通過strip()去除

有些需要分左右側分別刪除則通過lstrip()與rstrip(),即left和right

==>for ent in ~:

ent[‘url’]

***) soup.select()到的所需元素在同一個類中,則可以使用contents[0]區分

***)time與str間的轉換

from datetime import date timeStr==>time        dt=datetime.strptime(timesource,’%Y%m%d’)time==>Str        dt.strftime(‘%Y-%m-%d’)

***) 將list[]各元素串連

‘-‘.join(list) #將list中的各元素以-方式串連‘’.join([p.text.strip() for p in soup.select(‘#artibody p’)[:-1]])

***) 對於有多頁的網址,則需要找到page對應部分改為{},

然後通過format()進行替換

news_total=[]for i in range(1,3):    newsurl=url.format(i)    newsary=parseListlink(newsurl)    new_total.extend(newsary)

3. 使用pandas儲存資料,其中是DataFrame()功能函數

df=pandas.DataFrame(list)print(df.head(20))  #顯示前20條資訊df.to_excel('news.xlsx') #轉存為excel格式,名字為news.xlsx

其中list的格式為

for u in geturl(url):    excel1 = [] # 迴圈開始清空數組    result = {} # 迴圈開始清空字典    try:        # 每個條目在新字典賦值        result['zeren']=getComments(u)        result['id']=i        i=i+1    except:        continue    #每個條目形成數組    excel1.append(result)    #在列表中添加數組    list.extend(excel1)

4. 儲存資料庫

df=pandas.DataFrame(list)print(df.head(20))  #顯示前20條資訊# df.to_excel('news.xlsx') #轉存為excel格式,名字為news.xlsxwith sqlite3.connect('news.sqlite') as db:    # 存入news.sqlite檔案中的news表格    df.to_sql('news',con=db)    # 讀取/查詢news表格並將資料賦值給df2    df2=pandas.read_sql_query('SELECT * FROM news',con=db)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.