摘要:前言最近接了一個爬蟲的私活,收益頗豐。項目需求一個類似百度文庫的網站,要求給出獲得文章,以形式保存下來。但是這次需要保存到這不難,難在要求格式不變。文章都是以許多標簽組合在一起的。知情人請告知,感激不盡。
前言
最近接了一個爬蟲的私活,收益頗豐。自認為對爬蟲掌握的還算不錯,爬過很多國內外網站,
數據超過百萬,應對過封IP、設驗證碼、假數據、強制登錄等反爬蟲手段。于是乎,我毫不猶豫的接下了該活。
但是進行了一半,我遇到了困難,寫這篇文章希望能夠找到感興趣的朋友一起解決,一起分享勞動成果。如果到期沒有解決的話,就當一次經歷記錄一下也罷。
項目需求一個類似百度文庫的網站,要求給出url,獲得文章,以Word形式保存下來。保持格式不變。
我的進展和思路我以前爬數據都是以文本的形式獲得數據,然后清洗,保存數據庫。但是這次需要保存到word,這不難,難在要求格式不變。我打算根據元素的css屬性,設置在word里面的格式。
獲取文本和樣式首先我使用我最熟悉的python+selenium+chrome組合,無頭模式啟動不用打開瀏覽器比較方便
def open_brower_headless(): chromeOptions = webdriver.ChromeOptions() chromeOptions.add_argument("headless") browser = webdriver.Chrome(chrome_options=chromeOptions) return browser
文章部分是一個iframe框,通過selenium的switch_to_frame()方法切換到iframe元素,然后就是一系列的定位取值操作,很容易的取到了文章的文本。文章都是以許多 標簽組合在一起的。通過絕對定位控制格式。
(爬蟲手法詳情https://segmentfault.com/a/11...)
我利用selenium的value_of_css_property()方法可以獲得元素的屬性(font-family、top、font-size),這個方法比較強,不僅可以獲得行內樣式的css,還可以獲得外嵌式的css,所以我不用擔心它的樣式寫在css文件里。這樣每一行的格式我就得到了。
1. 怎么換行?對比該元素和上一個元素的top屬性的值,如果不一樣就換行,高度不一樣必定不在一行,很合理。
2. 文字大?。吭氐?b>font-size的大小換算公式 ($/14 +0.5),差不多匹配docx里面的run.font.size的值
python庫里面操作word使用的是docx,docx對word 的讀寫有一套完整的方法。比如:添加文字,設置字體,顏色,大小,段落,表格,添加圖片。
docx的使用也非常簡單,主要分為三級:file >paragraph >run,下面簡單介紹一下:
file = docx.Document() #新建文件 f = file.add_paragraph("添加段落") #添加段落 run = f.add_run("追加文字") #追加文字 run.font.color.rgb = RGBColor(0,0,1) #設置字體顏色 run.font.size = Pt(36) #設置字體大小 run.font.name = "宋體" #設置字體 run._element.rPr.rFonts.set(qn("w:eastAsia"), "宋體") run.add_break() #換行 file.save("d.docx") #保存文件至今進度
如此我完成了一個簡單word的爬取和保存。
瓶頸但是我遇到了更復雜的格式,就是表格。F12后發現表格的邊框就是一個圖片! 至此我不知道怎么進行下去了。開始我以為識別圖片后我可以利用doxc 插入表格,根據文字的位置,插入在對應的表格里,但是我發現有的文章還有其他圖片。所以我不能遇到圖片就將下面的文字按照表格里面的文字處理。
其他辦法發現這條路似乎走不通后,我試了其他辦法,就是pandoc,這是一個文檔轉化工具,windows下安裝后通過輸入命令來轉化文檔。比如將a.html轉化為b.docx
pandoc -s a.html -o b.docx
但是得到得word 格式還沒有我上面程序寫的好,應該是我不太會用,網上對pandoc評價很高,幾乎神器。
我嘗試將html先轉化為pdf,然后再轉word.但是失敗了,需要安裝pdf 引擎,而且需要配中文之類的,總之我沒有成功,不知道轉化成pdf后再轉化word 它能否識別并插入表格。而不是背景圖。
知情人請告知,感激不盡。
我發現文章結構的class名和百度文庫里的一樣,這是通過百度富文本編輯器編輯的吧?,如果是這樣通過這個富文本編輯器反編輯一下是否可行?
后面的話距離項目測試版交期還有3天,搞不定這個問題話就黃了,如果有朋友能夠解決或者有思路的話可以一起完成,報酬四位數。一起吃雞,真不舍得放棄!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43617.html
摘要:第二次嘗試以為是打包過程中出現了問題,清理項目重新打,然后重新部署到上,仍然沒有解決問題。于是我在所有目錄下都找了一遍,果然在目錄下發現了一個項目的同名文件關,刪除之。重新把新的包到目錄下后重啟。 序 不久前畢設網站的第三版上線,然后我遇到了一個奇怪的bug: 訪問頁面的時候,第一次打開404,必須F5刷新后才能正常顯示 簡直迷 第一次嘗試 最開始以為是瀏覽器緩存沒有清理【思路大概是...
摘要:正確的思路是等概率隨機只取出共個數,每個數出現的概率也是相等的隨機輸出把一段代碼改成,并增加單元測試。代碼本身很簡單,即使沒學過也能看懂,改后的代碼如下但是對于單元測試則僅限于聽過的地步,需要用到,好像也有別的模塊。 在拉勾上投了十幾個公司,大部分都被標記為不合適,有兩個給了面試機會,其中一個自己覺得肯定不會去的,也就沒有去面試,另一個經歷了一輪電話面加一輪現場筆試和面試,在此記錄一下...
閱讀 1771·2021-10-11 10:59
閱讀 2415·2021-09-30 09:53
閱讀 1775·2021-09-22 15:28
閱讀 2803·2019-08-29 15:29
閱讀 1566·2019-08-29 13:53
閱讀 3213·2019-08-29 12:34
閱讀 2863·2019-08-26 10:16
閱讀 2672·2019-08-23 15:16