天天看点

Python 爬取糗事百科段子

#!/usr/bin/python
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
import sys
reload(sys)
sys.setdefaultencoding('utf8') 

page = 1
url = 'http://www.qiushibaike.com/hot/page/' + str(page)
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
headers = {'User-Agent':user_agent}
try:
    request = urllib2.Request(url,headers = headers)
    response  = urllib2.urlopen(request)
   # print response.read()
 
    ######_match_ string
 
    content = response.read().decode('utf-8')
    # 其中 (.*?)为匹配的内容
    # 如果对正则不是很熟的同学,可以参考以下: 
    # 1. “.”是通配符,”*”表示匹配0次或任意次,”?”表示非贪婪匹配,.*?组合在一起则表示尽可能短地做匹配。 
    # 2. (.*?)代表一个分组,或者说一个捕获组。 
    # 3. re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。 
    pattern = re.compile(r'<div.*?author clearfix".*?<img.*?<h2>(.*?)</h2>.*?<div.*?'+
                         'content">.*?<span>(.*?)</span>.*?<div class="stats.*?class="number">(.*?)</i>',re.S)
    items = re.findall(pattern,content)
    # print("%s"%items)
    for item in items:
        print("auther:%s"%item[0])
        print("content:%s"%item[1])
        print("likes:%s\n"%item[2])
 
except urllib2.URLError,e:
    if hasattr(e,'code'):
        print e.code
    if hasattr(e,'reaon'):
        print e.reason
           
原文地址