爬取百度貼吧原創(chuàng)小說(shuō)

最近都沒(méi)怎么寫(xiě)代碼,忙著上班叮趴,每天上到晚上九點(diǎn)半割笙,回來(lái)看視頻,學(xué)習(xí)scrapy,寫(xiě)了個(gè)小項(xiàng)目伤溉,無(wú)法傳回下一頁(yè)鏈接繼續(xù)爬取般码。。乱顾。板祝。還在調(diào)試。

期間又寫(xiě)了個(gè)爬取貼吧小爬蟲(chóng)練練xpath提取規(guī)則走净,用的不是很熟券时。還是有錯(cuò)誤。

# -*- coding: utf-8 -*-
import requests
from lxml import etree

def gethtml(url):
    header = {'User-Agent' :'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
    r = requests.get(url, headers=header)
    return r.content

def parsehtml(html):
    selector = etree.HTML(html)
    name = selector.xpath('//*[@id="j_core_title_wrap"]/h3/text()')[0]
    author = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[1]/ul/li[3]/a/text()')[0]
    time = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[2]/div[4]/div[1]/div/span[3]/text()')[0]
    infos = selector.xpath('//div[@class="d_post_content_main "]/div[1]')
    for info in infos:
        paper = info.xpath('string(.)').strip().encode('utf-8')
        f = open('001.text', 'a', encoding='utf-8')
        print(paper)
        f.write(str(paper))
        f.close()

def main(infourl):
    html = gethtml(infourl)
    parsehtml(html)

main("https://tieba.baidu.com/p/5366583054?see_lz=1")

打開(kāi)content.txt是這個(gè)鬼樣子:


image.png

使用encode大法修改代碼:

def parsehtml(html):
    selector = etree.HTML(html)
    name = selector.xpath('//*[@id="j_core_title_wrap"]/h3/text()')[0].encode('utf-8')
    author = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[1]/ul/li[3]/a/text()')[0].encode('utf-8')
    time = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[2]/div[4]/div[1]/div/span[3]/text()')[0].encode('utf-8')
    infos = selector.xpath('//div[@class="d_post_content_main "]/div[1]')
    for info in infos:
        paper = info.xpath('string(.)').strip().encode('utf-8')
        return paper

得到的文件時(shí)這個(gè)鬼樣:


image.png

可是我要寫(xiě)成這樣子的話:

# -*- coding: utf-8 -*-
import requests
from lxml import etree

url = "https://tieba.baidu.com/p/5366583054?see_lz=1"
header = {'User-Agent' :'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
r = requests.get(url, headers=header)

selector = etree.HTML(r.text)
name = selector.xpath('//*[@id="j_core_title_wrap"]/h3/text()')[0]
author = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[1]/ul/li[3]/a/text()')[0]
time = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[2]/div[4]/div[1]/div/span[3]/text()')[0]
infos = selector.xpath('//div[@class="d_post_content_main "]/div[1]')
for info in infos:
    paper = info.xpath('string(.)').strip()
    print(paper + '\n')
    f = open('content.text', 'a', encoding='utf-8')
    f.write(str(paper) + '\n')
    f.close()

content文件又能正常顯示出中文伏伯,


image.png

后來(lái)我索性新建一個(gè)文件橘洞,把第二個(gè)程序代碼改裝一下:

# -*- coding: utf-8 -*-
import requests
from lxml import etree

def gethtml(url):
    # url = "https://tieba.baidu.com/p/5366583054?see_lz=1"
    header = {'User-Agent' :'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
    r = requests.get(url, headers=header)
    html = r.text
    return html

def parsehtml(html):
    selector = etree.HTML(html)
    name = selector.xpath('//*[@id="j_core_title_wrap"]/h3/text()')[0]
    author = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[1]/ul/li[3]/a/text()')[0]
    time = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[2]/div[4]/div[1]/div/span[3]/text()')[0]
    infos = selector.xpath('//div[@class="d_post_content_main "]/div[1]')
    for info in infos:
        paper = info.xpath('string(.)').strip()
        print(paper + '\n')
        f = open('content.text', 'a', encoding='utf-8')
        f.write(str(paper) + '\n')
        f.close()

url1 = "https://tieba.baidu.com/p/5366583054?see_lz=1"
parsehtml(gethtml(url1))
#
# if len(etree.HTML(gethtml(url1)).xpath('//*[@id="thread_theme_7"]/div[1]/ul/li[1]/a[6]')):
#     furtherurl = etree.HTML(gethtml(url1)).xpath('//*[@id="thread_theme_7"]/div[1]/ul/li[1]/a[6]/@href/text()')
#     url = "https://tieba.baidu.com" + str(furtherurl)
#     parsehtml(gethtml(url))

繼續(xù)可以正常運(yùn)行并且可以顯示中文。


image.png

但是我不能只獲取這一頁(yè)的小說(shuō)呀说搅,于是提取下一頁(yè)的鏈接并且拼接url:

if len(etree.HTML(gethtml(url1)).xpath('//*[@id="thread_theme_7"]/div[1]/ul/li[1]/a[6]')):
     furtherurl = etree.HTML(gethtml(url1)).xpath('//*[@id="thread_theme_7"]/div[1]/ul/li[1]/a[6]/@href/text()')
     url = "https://tieba.baidu.com" + str(furtherurl)
     parsehtml(gethtml(url))

然而跑的時(shí)候報(bào)錯(cuò)炸枣。。弄唧。抛虏。。


image.png

image.png

先這樣吧套才,12點(diǎn)了好困,明天再說(shuō)慕淡。背伴。。

早起更新峰髓,早上意識(shí)到傻寂,提取鏈接是不需要/text()的,我們只需要提取出鏈接的屬性携兵,另外疾掰,由于xpath返回的是一個(gè)列表類(lèi)型,我們需要用索引徐紧,取第0個(gè)静檬,代碼修改如下:

if len(etree.HTML(gethtml(url1)).xpath('//*[@id="thread_theme_7"]/div[1]/ul/li[1]/a[6]')):
     furtherurl = etree.HTML(gethtml(url1)).xpath('//*[@id="thread_theme_7"]/div[1]/ul/li[1]/a[6]/@href')[0]
     url = "https://tieba.baidu.com" + str(furtherurl)
     parsehtml(gethtml(url))

這樣跑起來(lái)還是有個(gè)問(wèn)題,顯示獲取的time內(nèi)容list index out of range, 先注釋掉這行并级,看看能不能翻頁(yè)獲取內(nèi)容拂檩。試了一下可以翻頁(yè),但是只能翻到第三頁(yè)獲取數(shù)據(jù)嘲碧,這又是啥問(wèn)題稻励。。愈涩。望抽。

第二天晚上下班加矛,回來(lái)更新。上班期間偷偷查了些資料煤篙,嘿嘿斟览,貌似是被網(wǎng)站限制的原因。后來(lái)還是通過(guò)構(gòu)造url完成了代碼舰蟆。趣惠。。身害。味悄。。表示本來(lái)就是因?yàn)橄胪ㄟ^(guò)找下一頁(yè)鏈接然后迭代的方式去抓取的塌鸯,結(jié)果還是回到了老路子侍瑟,郁悶。用scrapy也是有這個(gè)問(wèn)題丙猬。再慢慢查資料吧~完整代碼如下:

# -*- coding: utf-8 -*-
import requests
from lxml import etree

def gethtml(url):
    # url = "https://tieba.baidu.com/p/5366583054?see_lz=1"
    header = {'User-Agent' :'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
    r = requests.get(url, headers=header)
    html = r.text
    return html

def parsehtml(html):
    selector = etree.HTML(html)
    name = selector.xpath('//*[@id="j_core_title_wrap"]/h3/text()')[0]
    author = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[1]/ul/li[3]/a/text()')[0]
    # time = selector.xpath('//*[@id="j_p_postlist"]/div[1]/div[2]/div[4]/div[1]/div/span[3]/text()')[0]
    infos = selector.xpath('//div[@class="d_post_content_main "]/div[1]')
    for info in infos:
        paper = info.xpath('string(.)').strip()
        print(paper + '\n')
        f = open('content.text', 'a', encoding='utf-8')
        f.write(str(paper) + '\n')
        f.close()

url1 = "https://tieba.baidu.com/p/5366583054?see_lz=1"
parsehtml(gethtml(url1))

for i in range(2, 11):
    url2 = "https://tieba.baidu.com/p/5366583054?pn=" + str(i)
    parsehtml(gethtml(url2))

以后再填坑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涨颜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子茧球,更是在濱河造成了極大的恐慌庭瑰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抢埋,死亡現(xiàn)場(chǎng)離奇詭異弹灭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)揪垄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)穷吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人饥努,你說(shuō)我怎么就攤上這事捡鱼。” “怎么了酷愧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵驾诈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我溶浴,道長(zhǎng)翘鸭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任戳葵,我火速辦了婚禮就乓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己生蚁,他們只是感情好噩翠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著邦投,像睡著了一般伤锚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上志衣,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天屯援,我揣著相機(jī)與錄音,去河邊找鬼念脯。 笑死狞洋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绿店。 我是一名探鬼主播吉懊,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼假勿!你這毒婦竟也來(lái)了借嗽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤转培,失蹤者是張志新(化名)和其女友劉穎恶导,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浸须,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惨寿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羽戒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虎韵,死狀恐怖易稠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情包蓝,我是刑警寧澤驶社,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站测萎,受9級(jí)特大地震影響亡电,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硅瞧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一份乒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦或辖、人聲如沸瘾英。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缺谴。三九已至,卻和暖如春耳鸯,著一層夾襖步出監(jiān)牢的瞬間湿蛔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工县爬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阳啥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓捌省,卻偏偏與公主長(zhǎng)得像苫纤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纲缓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 最近想在工作相關(guān)的項(xiàng)目上做技術(shù)改進(jìn)卷拘,需要全而準(zhǔn)的車(chē)型數(shù)據(jù),尋尋覓覓而不得祝高,所以就只能自己動(dòng)手豐衣足食栗弟,到網(wǎng)上獲(竊...
    littlelory閱讀 3,898評(píng)論 7 19
  • 你那里下雨了嗎乍赫? 最近北京陰雨天總是特別多,前幾年下雨總是或多或少的感慨舊情緒陆蟆,這幾年時(shí)過(guò)境遷雷厂,物轉(zhuǎn)星移,逐漸淡了...
    默成789閱讀 157評(píng)論 0 1
  • Problem Description 建立并中序遍歷一個(gè)排序二叉樹(shù) 排序二叉樹(shù)是指左子樹(shù)的所有節(jié)點(diǎn)的值均小于它根...
    vouv閱讀 910評(píng)論 0 1
  • 昨晚他下班回家路上叠殷,邊走邊聊天改鲫。聊我的狀態(tài),聊他的見(jiàn)解和感悟林束。好久沒(méi)有這樣聊天了像棘。我們的交流更多是止于表面的噓寒問(wèn)...
    綻蕊向陽(yáng)閱讀 379評(píng)論 2 3