python采集_Python采集实例1
目標是把http://www.gg4493.cn/主頁上所有數(shù)據(jù)爬取下來,獲得每一篇新聞的名稱、時間、來源以及正文。
接下來分解目標,一步一步地做。
步驟1:將主頁上所有鏈接爬取出來,寫到文件里。
python在獲取html方面十分方便,寥寥數(shù)行代碼就可以實現(xiàn)我們需要的功能。
復制代碼代碼如下:
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
page.close()
return html
我們都知道html鏈接的標簽是“a”,鏈接的屬性是“href”,也就是要獲得html中所有tag=a,attrs=href 值。
查閱了資料,一開始我打算用HTMLParser,而且也寫出來了。但是它有一個問題,就是遇到中文字符的時候無法處理。
復制代碼代碼如下:
class parser(HTMLParser.HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == 'a':
for attr, value in attrs:
if attr == 'href':
print value
后來使用了SGMLParser,它就沒有這個問題。
復制代碼代碼如下:
class URLParser(SGMLParser):
def reset(self):
SGMLParser.reset(self)
self.urls = []
def start_a(self,attrs):
href = [v for k,v in attrs if k=='href']
if href:
self.urls.extend(href)
SGMLParser針對某個標簽都需要重載它的函數(shù),這里是把所有的鏈接放到該類的urls里。
復制代碼代碼如下:
lParser = URLParser()#分析器來的
socket = urllib.urlopen("http://www.gg4493.cn/")#打開這個網(wǎng)頁
fout = file('urls.txt', 'w')#要把鏈接寫到這個文件里
lParser.feed(socket.read())#分析啦
reg = 'http://www.gg4493.cn/.*'#這個是用來匹配符合條件的鏈接,使用正則表達式匹配
pattern = re.compile(reg)
for url in lParser.urls:#鏈接都存在urls里
if pattern.match(url):
fout.write(url+'\n')
fout.close()
總結
以上是生活随笔為你收集整理的python采集_Python采集实例1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql my.cnf key_buf
- 下一篇: java中给变量赋值_java中变量赋值