python抓取網頁

weixin_34365417發表於2017-06-11

python 使用requests第三方庫抓取網頁HTML程式碼,並使用正則進行匹配檢索程式碼

以簡書首頁為例

如果未檢索成功 請copy載入的HTML程式碼,然後檢驗正則匹配的是否正確,網頁標籤元素可能改變,導致正則匹配不正確

#!/usr/bin/python
# coding: utf-8

import os, sys
import requests
import re

# page = 1
# url = 'http://www.qiushibaike.com/hot/page/' + str(page)
# user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
# headers = { 'User-Agent' : user_agent }

# 嗅事百科
def getHTMLHeader(urlString,headers):
    try:
        r = requests.get(urlString,headers = headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except r.URLError, e:
        if hasattr(e,"code"):
            print e.code
        if hasattr(e,"reason"):
            print e.reason

def getHTML(urlString):
    try:
        r = requests.get(urlString)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except r.URLError, e:
        if hasattr(e, "code"):
            print e.code
        if hasattr(e, "reason"):
            print e.reason


#正則提取資料  爬取簡書首頁 文章標題,連結,閱讀量,評論量為例
def regJianshuHtml(url):
    if url.strip() == '':
        html = getHTML("http://www.jianshu.com")
    else:
        html = getHTML(url)
    reg = r'<a class="title" target="_blank" href="(.*?)">(.*?)</a>'
    hotre = re.compile(reg)
    artlist = re.findall(hotre,html)

    for article in artlist:
        for com in article:
            if com.startswith("/p/"):
                print "http://www.jianshu.com" + com
            else:
                print com

if __name__ == '__main__':
    # url = 'https://www.pmcaff.com/'
    # print(getHtmlText(url))

    # html = getHTMLHeader(url,headers)
    # print html

    regJianshuHtml("")

結果

http://www.jianshu.com/p/2622723e95b2
薛之謙高磊鑫:一別兩寬,各生歡喜,你好,再見。
http://www.jianshu.com/p/1a5d3310b672
古巴女人迷死多少男人女人和我.....古巴裸遊記2
http://www.jianshu.com/p/3298cc246015
中英雙語:女性和公司(1)前言
http://www.jianshu.com/p/59a0e9694498
你只是表面上很努力,所以依然過得很煎熬
http://www.jianshu.com/p/bc2282da3b33
【原創育兒故事大賽】小恐龍給姥爺泡的茶
http://www.jianshu.com/p/72d8ce040ca7
不是你幸福少,而是你喪失了獲得幸福的能力
http://www.jianshu.com/p/967cfeab62de
你為什麼開始談戀愛?
http://www.jianshu.com/p/cbc0566766d1
別再對我好了,我會當真的
http://www.jianshu.com/p/3d27a8603948
那些年我們追過的夢,還在嗎?
http://www.jianshu.com/p/f15e454ac4c5
寫在大三末尾:10條不怎麼重要的大學建議
http://www.jianshu.com/p/86b10f6ea7d9
《簡書·大學生活專題5月刊》|我超級自律,就是為了和別人不一樣
http://www.jianshu.com/p/91347494f045
當寫作無法跟上野心時,大學老師讓我靜下心努力
http://www.jianshu.com/p/d8e696fef7d9
如何打造自己的核心競爭力
http://www.jianshu.com/p/0858c9d5ad10
99%有錢人不願告訴您的賺錢祕訣
http://www.jianshu.com/p/5e0905397803
看懂可口可樂,就能學會“定位”
http://www.jianshu.com/p/12b01f16e929
自律不一定會帶來自由,但會帶來一個更好的自己
http://www.jianshu.com/p/9c70cad93f1b
高考以後,你的人生才剛剛開始
http://www.jianshu.com/p/4688ba26e22a
情景劇|失戀女的膠原蛋白補充之旅
http://www.jianshu.com/p/7f4427d0ebdd
職場新人:有哪些靠譜的工作基本功
http://www.jianshu.com/p/d01ce7c931e5
夜深了,我來哄你的孩子睡覺

總結:

對HTML網頁結構要清晰。

  • 正規表示式要熟悉,是提取資料的關鍵。
  • 使用BeautifulSoup會簡單很多,裡面也會用到正則。

相關文章