爬取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')