乙個研究生同學因為學習需要,想提取乙個**的資料,然後把這些資料都放入excel當中。
剛開始我很不在意,以前什麼樣的爬蟲沒見過,這次不過是要把資料放入excel中而已。
於是我在網上找到乙個結合php生成excel的工具——phpexcel
然後寫了乙個簡單的程式,結果!!!失敗了= =
1.需要讀取的資料太多,一共1400多個網頁需要讀取(也許我太笨,沒找到一次讀取資料的介面)。
2.那個**的伺服器太差,開啟乙個網頁需要很長時間,而且經常出現請求超時的情況。
3.上面找的那個生成excel的工具不適合讀取這麼多的資料。
1.關於生成excel。我看了一下phpmyadmin,找到了乙個將資料庫匯出為excel的功能,而且匯出的速度很快,於是我打算先把資料寫入mysql中。
2.針對請求超時。剛開始每次超時我都重新執行一下程式,這樣做實在太浪費時間了。於是我在程式中,每次超時都重新讀取一次網頁,最多讀3次,否則在資料庫中寫入空的資料,然後讀下乙個網頁。結果發現,這樣做的成功率幾乎是100%。
<?php//避免程式執行30秒後停止
ini_set('max_execution_time', '0');
header("content-type: text/html; charset=utf8");
//連線資料庫
$conn=mysql_connect("localhost","root","")or die("連線錯誤");
mysql_select_db("newdb",$conn);
mysql_query("set names 'utf8'");
//讀取網頁超時時間
'timeout'=>15,//單位秒
)
);for($i = 1; $i<143; $i++)
}echo "success!";
?>
如果有讀取失敗,或者讀取錯誤的資料,只要用下面的程式讀取更新資料即可。
<?php//避免程式執行30秒後停止
ini_set('max_execution_time', '0');
header("content-type: text/html; charset=utf8");
//連線資料庫
$conn=mysql_connect("localhost","root","")or die("連線錯誤");
mysql_select_db("newdb",$conn);
mysql_query("set names 'utf8'");
//讀取網頁超時時間
'timeout'=>2,//單位秒
)
);$cnt=0;
while($cnt<3 && ($str=file_get_contents("", false, stream_context_create($opts)))===false)
$str = iconv("gb2312", "utf-8//ignore",$str);
preg_match_all('/(?<=\().+?分/', $str, $arr);
preg_match_all('/(?<=:).+?(?=<)/', $str, $arr2);
$sql = "update report set b1='".$arr[0][0]."',
c1='".$arr[0][1]."',
d1='".$arr2[0][5]."',
e1='".$arr2[0][6]."',
f1='".$arr2[0][7]."',
g1='".$arr2[0][8]."',
h1='".$arr2[0][9]."',
i1='".$arr2[0][10]."',
j1='".$arr[0][8]."',
k1='".$arr2[0][11]."',
l1='".$arr2[0][12]."',
m1='".$arr2[0][13]."',
n1='".$arr2[0][14]."',
o1='".$arr2[0][15]."',
p1='".$arr[0][14]."',
q1='".$arr2[0][16]."',
r1='".$arr2[0][17]."',
s1='".$arr2[0][18]."',
t1='".$arr[0][18]."',
u1='".$arr2[0][19]."',
v1='".$arr[0][20]."',
w1='".$arr2[0][20]."',
x1='".$arr2[0][21]."',
y1='".$arr2[0][22]."',
z1='".$arr[0][24]."',
a2='".$arr[0][25]."',
b2='".$arr2[0][23]."',
c2='".$arr2[0][24]."',
d2='".$arr[0][28]."',
e2='".$arr2[0][25]."',
f2='".$arr2[0][26]."',
g2='".$arr[0][31]."',
h2='".$arr2[0][27]."',
i2='".$arr2[0][28]."',
j2='".$arr2[0][29]."',
k2='".$arr[0][35]."',
l2='".$arr[0][36]."',
m2='".$arr2[0][30]."',
n2='".$arr2[0][31]."',
o2='".$arr[0][39]."',
p2='".$arr2[0][32]."',
q2='".$arr[0][41]."',
r2='".$arr2[0][33]."',
s2='".$arr2[0][34]."',
t2='".$arr[0][44]."',
u2='".$arr[0][45]."',
v2='".$arr2[0][35]."',
w2='".$arr2[0][36]."',
x2='".$arr2[0][37]."',
y2='".$arr2[0][38]."',
z2='".$arr2[0][39]."',
a3='".$arr[0][51]."',
b3='".$arr[0][51]."',
c3='".$arr2[0][40]."',
d3='".$arr[0][41]."'
where a1='星星科技(300256)'";
mysql_query($sql,$conn);
?>
記一次面試經歷
今早七點半的巴士從中山趕到廣州面試php開發助理,以前面的都是十來人 幾十人的小公司,不少還是培訓公司,坑的一逼!這次的公司不錯,比較正規,好歹上百人了,只是筆試題做得一般,題目有的雖有學過,但忘了,好吧!這就是沒準備充分的緣故!下面羅列下我還記得的題目 有些漏了就沒辦法了 之後hr面試聊了下,雖然...
記一次重構經歷
起因 最近因為公司內部對各個業務線的使用者業務進行統一剝離,形成使用者中心,所有使用者相關的業務和資料都落地到使用者中心,各個業務線以rpc的的形式依賴使用者中心的服務。結果 因為我的疏忽,造成了兩個bug沒有被測試出來。總結改進 這兩個bug的產生的原因都是因為我錯誤地估計了回歸測試的範圍,我的想...
記一次makefile的經歷
哎呀,剛接觸makefile 和 linux 不久,搞得很多c 的東西都拋諸腦後了,真的慚愧喲。這是我的檔案目錄 實際開發最好不要這樣命名檔案,否則到之後自己都不知道這些檔案都是幹嘛的 一開始的源 1 標頭檔案 include using std cout using std endl extern...