第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

爬取挪威的森林—直子所有的深愛都是秘密

標(biāo)簽:
Html/CSS Html5 Python
大致内容
  1. 知识储备
    Requests获取网页信息
    XPATH 提取爬虫
    Map 开启多线程
  2. 爬取目标
    回帖人姓名
    回帖内容
    回帖时间
  3. 流程图
  4. 代码分析
  5. 成果展示

python 2.7.11


流程图

图片描述



代码分析

#-*-coding:utf8-*-
from lxml import etree
from multiprocessing.dummy import Pool

#由于所获取的信息有一部分包含在JSON对象中,所以要用到json对象方法反序列化
import  json

import requests
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

# 生成贴吧网页列表
def getPages(url,total):
        urls=[]
        for i in range(1,total+1):
            singlePage=url+str(i)
            urls.append(singlePage)
        return urls
# 获取每一页所有楼主
def getElements(url):
    html=requests.get(url)
    # 获取网页的文本,容易经常忘记html
      不仅仅是网页的源代码还包含了其他很多信息
    html = html.text

    selector=etree.HTML(html)
    elements=selector.xpath("http://div[@class=
            'l_post l_post_bright j_l_post clearfix  ']")
    return elements

# 得到该页所有楼主的信息
def getInfo(elements):
    ElementsInfo=[]
    for each in elements:
        singlePeopleInfo={}
        # 注意尽管经过xpath的选择只有一个元素,
            依然要用列表的形式[0]获取该元素
        jsonPreInfo=each.xpath('@data-field')[0]

        jsonInfo=json.loads(jsonPreInfo)
        # 得到json对象获取内容是json['attrname']
            而不是类的class.attrname
        singlePeopleInfo['name']=jsonInfo['author']['user_name']
        # xpath可以通过chrome自动生成
        singlePeopleInfo['date']=each.xpath("div[2]/div[2]/div[1]/
                    div[2]/span[4]/text()")
        singlePeopleInfo['content']=each.xpath("div[2]/div[1]/
                    cc/div[1]/text()")[0].strip()

        ElementsInfo.append(singlePeopleInfo)
    return ElementsInfo

# 将楼主信息写入文件保存下来
def fileWrite(info):
    f=open('info.txt','a')
    for eachPage in info:
        for eachElement in eachPage:
            f.writelines("name:"+eachElement['name']+'\n')
            f.writelines("date:" + str(eachElement['date']) + '\n')
            f.writelines("content:" + eachElement['content'] + '\n')
            f.writelines('\n')
    f.close()

# 将流程逻辑组织在spider中便于多线程map函数的调用
def spider(url):
    print u'正在处理 %s'% url
    Elements=getElements(url)
    Elementsinfo=getInfo(Elements)
    # 声明全局变量因为要在多个函数之中共同使用
    global info
    info.append(Elementsinfo)

if __name__ == '__main__':
    # 开启多线程,数字取决电脑的核数,几核就是几
    pool=Pool(2)
    info=[]
    url="http://tieba.baidu.com/p/2985466337?pn="
    urls=getPages(url,5)
    pool.map(spider,urls)
    pool.close()
    pool.join()
    fileWrite(info)
    print "ok"

成果展示

图片描述

點(diǎn)擊查看更多內(nèi)容
16人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消