下麪是通過Python 爬取段子的完整代碼

運行環境 python 3.4

注釋很清晰相信有點基礎的都能懂

關鍵點就在正則表達式

運行程序,就會不斷地從網站獲取段子,竝以特定的形式展示出來,超級實用。

# -*- coding:utf-8 -*-

import urllib.request

import re

def getHtml(url , page):

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

try:

req = urllib.request.Request(url)

req.add_header('User-Agent', user_agent) #'fake-client'

response = urllib.request.urlopen(req)

the_page = response.read()

html = the_page.decode('utf-8')

except urllib.error.URLError as e:

if hasattr(e,"code"):

print (e.code)

if hasattr(e,"reason"):

print (e.reason)

return html

def getCrossTalk(html):

pattern = re.compile('.*?

'="content".*?(.*?).*?.*?(.*?).*?class="number">(.*?)',re.S)

#1).*? 是一個固定的搭配,.和*代表可以匹配任意無限多個字符,加上?表示使用非貪婪模式進行匹配,也就是我們會盡可能短地做匹配,以後我們還會大量用到 .*? 的搭配。

#2)(.*?)代表一個分組,在這個正則表達式中我們匹配了五個分組,在後麪的遍歷item中,item[0]就代表第一個(.*?)所指代的內容,item[1]就代表第二個(.*?)所指代的內容,以此類推。

#3)re.S 標志代表在匹配時爲點任意匹配模式,點 . 也可以代表換行符。

items = re.findall(pattern,html)

for item in items:

haveImg = re.search("img",item[3])

if not haveImg:

print ('發帖者: '+item[0]+'','內容: '+item[1]+'','點贊人數: '+item[2],'評論人數: '+item[3]+'')

for page in range(1,35):

url = 'http://www.qiushibaike.com/hot/page/' + str(page)

html = getHtml(url, page)

getCrossTalk(html)

三次元影像儀公司

三次元影像儀公司

三次元輪廓投影儀

ogp光學影像測量機