1. 程式人生 > >python的BeautifulSoup實現抓取網頁資料

python的BeautifulSoup實現抓取網頁資料

1環境:pycharm,python3.4

2.原始碼解析

import requests

import re

from bs4 import BeautifulSoup

#通過requests.get獲取整個網頁的資料

def getHtmlText(url):
    try:
        r = requests.get(url)
        # to cheack r.status_code is  your expected
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:

        return "craw failed"

#下圖是網頁中的內容:


#解析頁面內容,通過find_all函式find所有的a標籤的內容,返回一個list,

然後通過正則表示式匹配re.findall(r"[s][zh]\d{6}", href,得到href中的諸如sh201002或者sz201001這樣的號碼;將所有得號碼賦給一個list儲存

def getHtmlList(lst, list_url):

    html = getHtmlText(list_url)
    soup = BeautifulSoup(html, "html.parser")
    a = soup.find_all('a')


    for i in a:
        try:
            href = i.attrs['href']
            lst.append(re.findall(r"[s][zh]\d{6}", href)[0])
        except:
            continue
    print("lst:", lst)

#下面函式作用:通過上一個函式得到的號碼,傳給這個函式,拼成另一個url,獲取這個url網頁中的資料

抓取過程同理;不同之處是這裡通過soup.find("div", attrs={'class': 'stock-bets'})即:find函式抓取所有div標籤,屬性是stock-bets的內容,),find只返回第一個符合條件的結果,所以soup.find()後面可以直接接.text或者get_text()來獲得標籤中的文字;find_all()得到的所有符合條件的結果和soup.select()一樣都是列表list

def getHtmlInfo(lst, info_url, fpath):
    for l in lst:
        info_url = info_url + l + ".html"
        html = getHtmlText(info_url)
        try:
            if html == "":
                continue
            soup = BeautifulSoup(html, "html.parser")
            betsInfo = soup.find("div", attrs={'class': 'stock-bets'})


            infoDict = {}
            name = betsInfo.find_all(attrs={'class': 'bets-name'})[0]
            infoDict.update({"name": name.text.split()[0]})

#進一步得到標籤是dd和dt的所有資料,所以這裡用的find_all,返回一個list,這裡dd是key值,dt可看成value值,存入字典
            keylist = betsInfo.find_all("dd")
            keyvalue = betsInfo.find_all("dt")


            for i in range(len(keylist)):
                try:
                    key = keylist[i].text
                    val = keyvalue[i].text
                    dict2 = {'key': 'val'}
                    infoDict.update(dict2)
                    # infoDict[key] = val
                except:
                    print("error")

#將我們要的資料寫入檔案

            with open(fpath, 'a', encoding='utf-8') as f:
                f.write(str(infoDict) + '\n')
           
        except:
            continue
#主函式,呼叫上面的抓取網頁的函式即可
def main():
    list_url = "http://quote.eastmoney.com/stocklist.html"
    info_url = "https://gupiao.baidu.com/stock/"
    output_file = './stockInfo.txt'
    slist = []
    getHtmlList(slist, list_url)
    getHtmlInfo(slist, info_url, output_file)




main()

相關推薦

python的BeautifulSoup實現網頁資料

1環境:pycharm,python3.4 2.原始碼解析 import requests import re from bs4 import BeautifulSoup #通過requests.get獲取整個網頁的資料 def getHtmlText(url):    

有搜尋條件根據url網頁資料(java爬網頁資料)

最近有一個任務抓取如下圖的網頁資料  要獲取前一天的資料進行翻頁抓取資料並存入資料庫   如果就只是抓取當前頁的資料  沒有條件和翻頁資料 這個就比較簡單了 但是要選取前一天的資料,還有分頁資料 一開始的思路就想錯了(開始想的是觸發查詢按鈕和

python網頁資料處理後視覺化

抓取文章的連結,訪問量儲存到本地 1 #coding=utf-8 2 import requests as req 3 import re 4 import urllib 5 from bs4 import BeautifulSoup 6 import sys 7 import code

Python網頁資料的終極辦法

假設你在網上搜索某個專案所需的原始資料,但壞訊息是資料存在於網頁中,並且沒有可用於獲取原始資料的API。 所以現在你必須浪費30分鐘寫指令碼來獲取資料(最後花費 2小時)。 這不難但是很浪費時間。     Pandas庫有一種內建的方法,可以從名為re

C語言實現網頁原始碼

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h&

Java網頁資料(原網頁+Javascript返回資料

轉載請註明出處! 有時候由於種種原因,我們需要採集某個網站的資料,但由於不同網站對資料的顯示方式略有不同! 本文就用Java給大家演示如何抓取網站的資料:(1)抓取原網頁資料;(2)抓取網頁Jav

網頁資料 A標籤的HREF 值

在工作中,我們有時候需要從特定的網頁中抓取我們想要的資料,由於工作的需要,我給大家推薦一個專門的抓取類:Winista.HtmlParser.dll 當我們需要從有規律的網頁中提取資料時,如table tr td; ul li之類的,如果用正則表示式,或者做字串的處理,會非常

實現網頁圖片(JAVA實現

    最近學習網頁設計,想仿網路上的一個頁面,圖片素材一個一個地儲存起來太麻煩。就想著裡利用JAVA來實現一個小小的網頁圖片爬蟲,程式碼很簡單,不一會兒就實現了,但是當我訪問https協議的圖片時,一直報javax.net.ssl.SSLKeyException異常,到我儲

Python爬蟲 BeautifulSoup網頁資料 並儲存到資料庫MySQL

最近剛學習Python,做了個簡單的爬蟲,作為一個簡單的demo希望幫助和我一樣的初學者 程式碼使用python2.7做的爬蟲  抓取51job上面的職位名,公司名,薪資,釋出時間等等 直接上程式碼,程式碼中註釋還算比較清楚 ,沒有安裝mysql需要遮蔽掉相關程式碼:#!/u

node.js 小爬蟲網頁資料(2)

node.js 小爬蟲抓取網頁資料 在原來的基礎上,採用了promise的模組,使其可以一次性多頁面的爬取網頁資料。 var http = require('http') var Promise = require('promise') var cheerio = re

網頁資料並解析Android

這天遇到這樣一個需求:這種頁面資料可以抓取嗎? 隨後提供了賬號、密碼和網站地址: 帳號:kytj1     密碼:******************     登陸地址:http://student.tiaoji.kaoyan.com/tjadm 主要思路: 1、使用F

goLang 多執行緒網頁資料

突然有個想法想用goLang快速的抓取網頁資料,於是想到了 多執行緒進行頁面抓取 package main import ( "fmt" "log" "net/http" "os" "st

【php網頁爬蟲】php網頁資料

外掛介紹: PHP Simple HTML DOM解析類:Simple HTML DOM parser 幫我們很好地解決了使用 php html 解析 問題。可以通過這個php類來解析html文件,對其中的html元素進行操作 (PHP5+以上版本)。 使用方法: 1

R語言實現簡單的網頁資料

在知乎遇到這樣一個問題。 這是要爬取的內容的網頁: R語言的程式碼的實現方式如下: #安裝XML包 >install.packages("XML") #載入XML包 > l

Android系統匯入burp證書實現資料

Burpsuit設定代理 瀏覽器設定代理   瀏覽器訪問IP下載burp證書   匯出的證書後綴名為.der,這裡我們更改字尾名為.crt 匯入手機中 複製貼上在我們能記住的目錄 後

kettle網頁上的資料儲存到資料表中

今天做一個利用kettle抓取網頁資料儲存到資料表中的demo,如抓取AA市的空氣質量AQI 1.檢視網頁資訊 2.按下開發者工具,檢視虎丘空氣質量日報的請求 3.弄懂了網頁請求,並通過檢視資料格式,可以在資料庫中建表,表格如下 4.接下來就是在kettle中進行操

php網頁內容,獲取網頁資料

php通過simple_html_dom實現抓取網頁內容,獲取核心網頁資料,將網頁資料寫入本地 xxx.json 檔案 其程式碼實現邏輯: 1. 引入simple_html_dom.php檔案       require_once 'simple_ht

Python爬蟲:十分鐘實現資料資料API提供

  依舊先從爬蟲的基本概念說起,你去做爬蟲做資料抓取,第一件事想必是去檢視目標網站是否有api。有且可以使用的話,皆大歡喜。   假如目標網站自身不提供api,但今天你心情不好就想用api來抓資料,那

c# 網頁驗證碼並post資料

如果想開發半自動的註冊機程式,那麼把驗證碼讀取到winform裡面,然後提交資料是必須的流程,這篇博文記錄一下如何抓取網頁上面的驗證碼,注意不是驗證碼識別。有的網站會驗證Cookie,有的不會,本文包含Cookie讀取提交。 首先生命一個全域性的Cookie變數 priva

Python網頁動態資料——selenium webdriver的使用

文章目的 當我們使用Python爬取網頁資料時,往往用的是urllib模組,通過呼叫urllib模組的urlopen(url)方法返回網頁物件,並使用read()方法獲得url的html內容,然後使用BeautifulSoup抓取某個標籤內容,結合正則表示式過濾。但是,用u