国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > WEB開(kāi)發(fā) > 正文

一個(gè)簡(jiǎn)易而有趣的爬蟲(chóng)——對(duì)草榴帖子的爬取

2024-04-27 15:09:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

去年就寫(xiě)過(guò)一個(gè)類(lèi)似的爬蟲(chóng)程序,不過(guò)因?yàn)橹匮b電腦找不到了,今天剛好又再寫(xiě)了一個(gè),而且寫(xiě)的比之前的更加簡(jiǎn)潔。把寫(xiě)爬蟲(chóng)過(guò)程中遇到的問(wèn)題,和思路簡(jiǎn)單記錄下來(lái)。源代碼發(fā)在我的github上:https://github.com/haolexiao/A-toy-caoliu-crawler 其實(shí)代碼不長(zhǎng)也非常的簡(jiǎn)潔。

起因

起因是因?yàn)椴萘裾搲挥袝?huì)員才能使用搜索功能,非會(huì)員不能用,這就給找資源帶來(lái)了很多的不便,然后我想,我把每個(gè)資源帖子的標(biāo)題和地址爬下來(lái),不就可以在本地用搜索功能了嗎? 于是說(shuō)干就干。

初步探究

先初步研究了一下網(wǎng)頁(yè)源碼和網(wǎng)頁(yè)鏈接之后,覺(jué)得這個(gè)工作不難,網(wǎng)頁(yè)地址的翻頁(yè)就是原地址之后修改”page=x”其中x就是頁(yè)數(shù),而且資源帖子是存在一個(gè)表格里的,所以地址獲取和頁(yè)面都不復(fù)雜, 于是就著手開(kāi)始寫(xiě)爬蟲(chóng)。 編程語(yǔ)言用的是Python

寫(xiě)爬蟲(chóng)中遇到的問(wèn)題與學(xué)習(xí)

最開(kāi)始打算直接用

urllib.urlopen(url)

來(lái)直接爬,但是發(fā)現(xiàn)該論壇應(yīng)該是啟用了防爬蟲(chóng)措施,用了幾種鏈接獲取方法都拿不到需要的東西。 這可怎么辦呢 想到之前看到的大殺器——selenium,直接模擬網(wǎng)頁(yè)操作,這總不會(huì)被禁了吧。 果然用selenium之后就可以順利爬下來(lái)所需要的內(nèi)容 因?yàn)橹皼](méi)怎么用過(guò)selenium,所以就仔細(xì)研究了一下selenium獲取元素的方法,然后對(duì)照著網(wǎng)頁(yè)源碼,每個(gè)帖子定位的源碼地方在:

<h3><a href="**********這里是超鏈接地址**********" target="_blank" id="">**********這里是標(biāo)題**********</a></h3>

發(fā)現(xiàn)直接采用

find_element_by_tag_name("h3")

命令只能抓下來(lái)標(biāo)題部分,不能抓下來(lái)超鏈接,因?yàn)橛?/p>get_attribute('href')

命令得到的是空列表。 如果要抓超鏈接的話,得再按照tag:a這個(gè)標(biāo)簽來(lái)抓,這樣就太麻煩了(其實(shí)我是后來(lái)才意識(shí)到:按照h3的tag找,找的的是包含h3部分的整個(gè),而直接用get_attribute的話,因?yàn)閔3標(biāo)簽里不含有href的,所以找不出來(lái)。此時(shí)只要再繼續(xù)抓a的tag就能找出來(lái)) 然后發(fā)現(xiàn)

find_elements_by_xpath("http://h3/a[@target='_blank']")

就能非常好的找到結(jié)果,然后

x.textx.get_attribute('href')

分別就得到標(biāo)題和地址。

寫(xiě)文件遇到的問(wèn)題

然后抓取數(shù)據(jù)的問(wèn)題得到解決后,就要寫(xiě)入數(shù)據(jù)了,打算直接寫(xiě)到一個(gè)csv文件里,用「,」隔開(kāi)標(biāo)題和地址,最后用Excel打開(kāi)就好。 但是寫(xiě)入的時(shí)候碰見(jiàn)的問(wèn)題是,因?yàn)闃?biāo)題中文用的是Unicode編碼,直接write是不支持的,所以查了下相關(guān)資料,用utf-8編碼打開(kāi)并寫(xiě)入文件即可。

import codecsfile_output = codecs.open('caoliu.csv','w', 'utf_8_sig')

至于后面的為什么是’utf_8_sig’而不是’utf-8’那是因?yàn)槟J(rèn)的utf-8是不帶BOM的,用excel打開(kāi)中文是亂碼,用Notepad++可以正常打開(kāi)【去年那次我是先用notepad++打開(kāi),然后用Notepad++里自帶的轉(zhuǎn)換格式進(jìn)行轉(zhuǎn)換的】 今年我研究了一下發(fā)現(xiàn)是因?yàn)閹Р粠OM的問(wèn)題,網(wǎng)上搜了下用’utf_8_sig’就可以直接解決,搞定~

結(jié)果

最后爬了十幾分鐘,把騎兵區(qū)的前100個(gè)頁(yè)總共9k多條的帖子標(biāo)題和地址都給抓到本地excel里了 為什么是前100頁(yè)呢,因?yàn)?00頁(yè)之后還是需要會(huì)員才能訪問(wèn)了

參考資料

找了不少參考資料尤其是關(guān)于selenium的用法,下面這篇博文講的還是非常的詳細(xì)的: Python爬蟲(chóng)學(xué)習(xí)(9):Selenium的使用


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇义县| 平顶山市| 渭源县| 沛县| 灵石县| 新野县| 景德镇市| 东安县| 应城市| 邢台市| 清新县| 莒南县| 白水县| 彭山县| 蒙山县| 郎溪县| 巧家县| 铁岭县| 浪卡子县| 安福县| 资兴市| 和平区| 高碑店市| 靖边县| 临汾市| 中牟县| 龙胜| 萨嘎县| 汤原县| 综艺| 阿图什市| 曲水县| 湘潭县| 新蔡县| 桃源县| 柳州市| 扶绥县| 樟树市| 科技| 沙湾县| 双柏县|