美文网首页人生苦短
爬取糗事百科文字版

爬取糗事百科文字版

作者: dongger | 来源:发表于2018-11-13 23:18 被阅读9次

    主要收获

    • 字典数据写入mongodb数据库
    • 数据库中取值 点赞数大于某个值时提取数据,用$gte表示大于等于某个数,开始写入是字符串,后加上int()函数改为数据进行比查找
    • 利用select时,爬去内容中“查看全文”按钮和内容部分无法区分,每页爬去数据都是25,因此项bug存在,导致抓取的内容数总是大于25,后强行遍历数组,把含有“查看全文”内容的项目强行去除,重新构建数组。才成功
      -- 此项工作应吸取教训,留下疑问,百度许久不得解决办法。就是select中如何减去特定class属性的内容。
    import requests
    from bs4 import BeautifulSoup
    import lxml
    import time
    import pymongo
    client=pymongo.MongoClient('localhost',27017)
    donger=client['donger']
    sheet_2=donger['sheet_2']
    urls=["https://www.qiushibaike.com/text/page/{}/".format(str(i)) for i in range(1,14)]
    def getone_url(url):
        web_data=requests.get(url)
        neirongs=[]
        soup=BeautifulSoup(web_data.text,'lxml')
        authors=soup.select(' div > a >  h2 ')
        a=soup.select(' a.contentHerf > div > span ')
        for i in a:
            if i.get_text()!="查看全文":
                neirongs.append(i)
        numbers=soup.select('div.stats span.stats-vote i')
        discuss=soup.select('div.stats span.stats-comments i')
        for author ,neirong,number,discuss_one in zip(authors,neirongs,numbers,discuss):
            data={
                "author":author.get_text().strip(),
                "neirong":neirong.get_text().strip(),
                "number":int(number.get_text()),
                "discuss":discuss_one.get_text(),
            }
            print(data)
            sheet_2.insert_one(data)
    
    for url in urls:
        getone_url(url)
        time.sleep(2)
    
    # for item in sheet_2.find({'number':{'$gte':3000}}):
    #     print (item['neirong'])
    

    相关文章

      网友评论

        本文标题:爬取糗事百科文字版

        本文链接:https://www.haomeiwen.com/subject/arbrfqtx.html