當前位置:首頁 » 數據倉庫 » pythonhtml提取資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

pythonhtml提取資料庫

發布時間: 2022-04-19 03:38:59

『壹』 python怎樣使用正則表達式獲得html標簽數據

正則的話
import re
html = "<a href='xxx.xxx' title='xxx.xxx.xxx'>sample text1</a>abcdef<a href='xxx.xxx' title='xxx.xxx.xxx'>sample text2</a>"
result = map(lambda name: re.sub("<a href=.*?>","",name.strip().replace("</a>","")), re.findall("<a href=.*?>.*?</a>",html))
print result
上面代碼會把所有a tag里的東西存在result這個list裡面。另外python有個模塊叫Beautiful Soup,專門用來處理html的,你有空可以看下

『貳』 python如何讀取網頁中的數據

用Beautiful Soup這類解析模塊:

  1. Beautiful Soup 是用Python寫的一個HTML/XML的解析器,它可以很好的處理不規范標記並生成剖析樹(parse tree);

  2. 它提供簡單又常用的導航(navigating),搜索以及修改剖析樹的操作;

  3. 用urllib或者urllib2(推薦)將頁面的html代碼下載後,用beautifulsoup解析該html;

  4. 然後用beautifulsoup的查找模塊或者正則匹配將你想獲得的內容找出來,就可以進行相關處理了,例如:


    html='<html><head><title>test</title></head><body><p>testbody</p></body></html>'
    soup=BeautifulSoup(html)
    soup.contents[0].name
    #u'html'
    soup.comtents[0].contents[0].name
    #u'head'
    head=soup.comtents[0].contents[0]
    head.parent.name
    #u'html'
    head.next
    #u'<title>test</title>

『叄』 如何利用Python爬蟲從網頁上批量獲取想要的信息

稍微說一下背景,當時我想研究蛋白質與小分子的復合物在空間三維結構上的一些規律,首先得有數據啊,數據從哪裡來?就是從一個涵蓋所有已經解析三維結構的蛋白質-小分子復合物的資料庫裡面下載。這時候,手動一個個去下顯然是不可取的,我們需要寫個腳本,能從特定的網站選擇性得批量下載需要的信息。python是不錯的選擇。

import urllib #python中用於獲取網站的模塊
import urllib2, cookielib

有些網站訪問時需要cookie的,python處理cookie代碼如下:
cj = cookielib.CookieJar ( )
opener = urllib2.build_opener( urllib2.HttpCookieProcessor(cj) )
urllib2.install_opener (opener)

通常我們需要在網站中搜索得到我們需要的信息,這里分為二種情況:

1. 第一種,直接改變網址就可以得到你想要搜索的頁面:

def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx.cgi?&' + 『你想要搜索的參數』 # 結合自己頁面情況適當修改
page = urllib2.urlopen(url)
pageContent = page.read( )
return pageContent #返回的是HTML格式的頁面信息

2.第二種,你需要用到post方法,將你搜索的內容放在postdata裡面,然後返回你需要的頁面

def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx' #這個網址是你進入搜索界面的網址
postData = urllib.urlencode( { 各種『post』參數輸入 } ) #這裡面的post參數輸入需要自己去查
req= urllib2.Request (url, postData)
pageContent = urllib2.urlopen (req). read( )
return pageContent #返回的是HTML格式的頁面信息

在獲取了我們需要的網頁信息之後,我們需要從獲得的網頁中進一步獲取我們需要的信息,這里我推薦使用 BeautifulSoup 這個模塊, python自帶的沒有,可以自行網路谷歌下載安裝。 BeautifulSoup 翻譯就是『美味的湯』,你需要做的是從一鍋湯裡面找到你喜歡吃的東西。

import re # 正則表達式,用於匹配字元
from bs4 import BeautifulSoup # 導入BeautifulSoup 模塊

soup = BeautifulSoup(pageContent) #pageContent就是上面我們搜索得到的頁面

soup就是 HTML 中所有的標簽(tag)BeautifulSoup處理格式化後的字元串,一個標準的tag形式為:

hwkobe24

通過一些過濾方法,我們可以從soup中獲取我們需要的信息:

(1) find_all ( name , attrs , recursive , text , **kwargs)
這裡面,我們通過添加對標簽的約束來獲取需要的標簽列表, 比如 soup.find_all ('p') 就是尋找名字為『p』的 標簽,而soup.find_all (class = "tittle") 就是找到所有class屬性為"tittle" 的標簽,以及soup.find_all ( class = re.compile('lass')) 表示 class屬性中包含『lass』的所有標簽,這里用到了正則表達式(可以自己學習一下,非常有用滴)

當我們獲取了所有想要標簽的列表之後,遍歷這個列表,再獲取標簽中你需要的內容,通常我們需要標簽中的文字部分,也就是網頁中顯示出來的文字,代碼如下:

tagList = soup.find_all (class="tittle") #如果標簽比較復雜,可以用多個過濾條件使過濾更加嚴格

for tag in tagList:
print tag.text
f.write ( str(tag.text) ) #將這些信息寫入本地文件中以後使用

(2)find( name , attrs , recursive , text , **kwargs )

它與 find_all( ) 方法唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果

(3)find_parents( ) find_parent( )

find_all() 和 find() 只搜索當前節點的所有子節點,孫子節點等. find_parents() 和 find_parent() 用來搜索當前節點的父輩節點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內容

(4)find_next_siblings() find_next_sibling()

這2個方法通過 .next_siblings 屬性對當 tag 的所有後面解析的兄弟 tag 節點進代, find_next_siblings() 方法返回所有符合條件的後面的兄弟節點,find_next_sibling() 只返回符合條件的後面的第一個tag節點

(5)find_previous_siblings() find_previous_sibling()

這2個方法通過 .previous_siblings 屬性對當前 tag 的前面解析的兄弟 tag 節點進行迭代, find_previous_siblings()方法返回所有符合條件的前面的兄弟節點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節點

(6)find_all_next() find_next()

這2個方法通過 .next_elements 屬性對當前 tag 的之後的 tag 和字元串進行迭代, find_all_next() 方法返回所有符合條件的節點, find_next() 方法返回第一個符合條件的節點

(7)find_all_previous() 和 find_previous()

這2個方法通過 .previous_elements 屬性對當前節點前面的 tag 和字元串進行迭代, find_all_previous() 方法返回所有符合條件的節點, find_previous()方法返回第一個符合條件的節點

具體的使用方法還有很多,用到這里你應該可以解決大部分問題了,如果要更深入了解可以參考官方的使用說明哈!

『肆』 python進行資料庫查詢時怎麼把結果提取出來

  1. 設置索引欄位。在開始提取數據前,先將member_id列設置為索引欄位。然後開始提取數據。

  2. 按行提取信息。第一步是按行提取數據,例如提取某個用戶的信息。

  3. 按列提取信息。第二步是按列提取數據,例如提取用戶工作年限列的所有信息。

  4. 按行與列提取信息。第三步是按行和列提取信息,把前面兩部的查詢條件放在一起,查詢特定用戶的特定信息。

  5. 在前面的基礎上繼續增加條件,增加一行同時查詢兩個特定用戶的貸款金額信息。

  6. 在前面的代碼後增加sum函數,對結果進行求和。

  7. 除了增加行的查詢條件以外,還可以增加列的查詢條件。

  8. 多個列的查詢也可以進行求和計算,在前面的代碼後增加sum函數,對這個用戶的貸款金額和年收入兩個欄位求和,並顯示出結果。

  9. 提取特定日期的信息。數據提取中還有一種很常見的需求就是按日期維度對數據進行匯總和提取,如按月,季度的匯總數據提取和按特定時間段的數據提取等等。

  10. 設置索引欄位。首先將索引欄位改為數據表中的日期欄位,這里將issue_d設置為數據表的索引欄位。按日期進行查詢和數據提取。

『伍』 如何用python抓取網頁上的數據

使用內置的包來抓取,就是在模仿瀏覽器訪問頁面,再把頁面的數據給解析出來,也可以看做是一次請求。

『陸』 如何用python抓取網頁資料庫

最簡單可以用urllib,python2.x和python3.x的用法不同,以python2.x為例:
import
urllib
html
=
urllib.open(url)
text
=
html.read()
復雜些可以用requests庫,支持各種請求類型,支持cookies,header等
再復雜些的可以用selenium,支持抓取javascript產生的文本

『柒』 如何用python把返回的html提取相應的內容到excel

解決方法:
正則提取出多個列表,然後利用 Pandas 的 DataFrame 數據類型寫入 excel,具體格式你自己安排,這里給出個基本示例:

text = """<td height="20" align="center">1</td>
<td align="center">產品</td>
<td align="center">red</td>
<td align="center">單價</td>
<td align="center">價格</td>
<td align="center">備注</td>

<td height="20" align="center">2</td>
<td align="center">產品</td>
<td align="center">red</td>
<td align="center">單價</td>
<td align="center">價格</td>
<td align="center">備注</td>

import pandas as pd
import re

p = re.compile('>(\S+)</td>')
q = p.findall(text)
table = pd.read_excel(r'D:\test.xlsx')
table['your title'] = pd.Series(q)
table.to_excel(r'D:\test.xlsx')

『捌』 python HTML處理

[<tdstyle="text-align:center">2014-12-31</td>,<tdstyle="text-align:center">6.16</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>1.76</td>]
[<tdstyle="text-align:center">2013-12-31</td>,<tdstyle="text-align:center">11.47</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>1.72</td>]
[<tdstyle="text-align:center">2012-12-31</td>,<tdstyle="text-align:center">-5.5</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>4.31</td>]
[<tdstyle="text-align:center">2011-12-31</td>,<tdstyle="text-align:center">14.83</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>0.53</td>]
[<tdstyle="text-align:center">2010-12-31</td>,<tdstyle="text-align:center">1.8</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>0.63</td>]
[<tdstyle="text-align:center">2009-12-31</td>,<tdstyle="text-align:center">21.69</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>5.61</td>]
[<tdstyle="text-align:center">2008-12-31</td>,<tdstyle="text-align:center">0.19</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>0.03</td>]
[<tdstyle="text-align:center">2007-12-31</td>,<tdstyle="text-align:center">2.89</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>0.77</td>]
[<tdstyle="text-align:center">2006-12-31</td>,<tdstyle="text-align:center">7.37</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>2.71</td>]
[<tdstyle="text-align:center">2005-12-31</td>,<tdstyle="text-align:center">3.99</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>28.66</td>]
[<tdstyle="text-align:center">2004-12-31</td>,<tdstyle="text-align:center">-132.62</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>78.84</td>]
[<tdstyle="text-align:center">2003-12-31</td>,<tdstyle="text-align:center">23.79</td>,<tdstyle="text-align:center">聽</td>]
[<tdstyle="text-align:center">2002-12-31</td>,<tdstyle="text-align:center">-759.2139</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>745.9739</td>]
[<tdstyle="text-align:center">2001-12-31</td>,<tdstyle="text-align:center">-5.47</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>6.852</td>]
[<tdstyle="text-align:center">2000-12-31</td>,<tdstyle="text-align:center">6.82</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>3.95</td>]
[<tdstyle="text-align:center">1999-12-31</td>,<tdstyle="text-align:center">10.48</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>6.87</td>]
[<tdstyle="text-align:center">1998-12-31</td>,<tdstyle="text-align:center">12.28</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>7.21</td>]
[<tdstyle="text-align:center">1997-12-31</td>,<tdstyle="text-align:center">54</td>,<tdstyle="text-align:center"><fontstyle="color:green">隆媒</font>18</td>]
[<tdstyle="text-align:center">1996-12-31</td>,<tdstyle="text-align:center">72</td>,<tdstyle="text-align:center"><fontstyle="color:red">隆眉</font>7</td>]
[<tdstyle="text-align:center">1995-12-31</td>,<tdstyle="text-align:center">65</td>,<tdstyle="text-align:center">聽</td>]

不止2004年的數據

我修改了下你的代碼用的requests的庫

importos
importsys
importtime
importrequests
importbs4
frompprintimportpprint

roe=open('ROE.txt','w')

req="http://vip.stock.finance.sina.com.cn/corp/view/vFD_FinancialGuideLineHistory.php?stockid=600159&typecode=financialratios59"
soup=bs4.BeautifulSoup(requests.get(req,timeout=30).text)
buffer=soup.find(id='Table1')
rows=buffer.find_all('tr')
forrowinrows:
cols=row.find_all('td')
text=str(cols)
if"-12-31"intext:
roe.write(text+' ')

time.sleep(2)

roe.close()