python網絡爬蟲(7)爬取靜態數據詳解

目的

爬取http://seputu.com/數據並存儲csv文件html

導入庫

lxml用於解析解析網頁HTML等源碼,提取數據。一些參考:http://www.javashuo.com/article/p-gjwrmipi-d.htmlpython

requests請求網頁正則表達式

chardet用於判斷網頁中的字符編碼格式瀏覽器

csv用於存儲文本使用。app

re用於正則表達式網站

from lxml import etree
import requests
import chardet
import csv
import re

獲取網頁

生成網頁頭帶入到request.get中,能夠模擬瀏覽器。其中的網頁頭,能夠在瀏覽器控制檯,network下查找到。編碼

user_agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
headers={'User-Agent':user_agent}
r=requests.get('http://seputu.com/',headers=headers)

判斷並轉換編碼

r.encoding=chardet.detect(r.content)['encoding']

解析網頁

html=etree.HTML(r.text)

提取網頁信息

瀏覽器打開對應網站,找到要提取的標籤,經過元素審查,完成html文本內容的抽取。xml

這裏抽取的內容爲h2_title,href,title內容。title經過正則表達式完成分組,並進行數據提取。htm

注意的是:python正則表達式部分,不支持部分的零寬斷言語法,採用分組方案,避開了可能出現的錯誤!blog

如如下代碼會出錯:

import re
box_title='[2012-5-23 21:14:42] 盜墓筆記 賀歲篇 真相'
pattern=re.compile(r'(?<=\[.*\]\s).*')
result1=re.search(pattern, box_title)

rows存儲了二維數據,用於寫入csv文件。

div_mulus=html.xpath('.//*[@class="mulu"]')
rows=[]
for div_mulu in div_mulus:
    div_h2=div_mulu.xpath('./div[@class="mulu-title"]/center/h2/text()')
    if len(div_h2)>0:
        h2_title=div_h2[0]
        a_s=div_mulu.xpath('./div[@class="box"]/ul/li/a')
        for a in a_s:
            href=a.xpath('./@href')[0]
            box_title=a.xpath('./@title')[0]
            pattern=re.compile(r'\s*\[(.*)\]\s+(.*)')
            result1=re.search(pattern, box_title)
            rows.append([h2_title,result1.group(2),href,result1.group(1)])
            pass
        pass
    pass

存儲數據

創建header一維數據,配合以前rows二維數據,經過w權限,配合writer方法,完成一維、二維的數據寫入

經過最後的輸出,標記正常完成。

headers=['title','real_title','href','date']
with open('text.csv','w') as f:
    f_csv=csv.writer(f,)
    f_csv.writerow(headers)
    f_csv.writerows(rows)
print('finished')
相關文章
相關標籤/搜索