爬取糗事百科文字版

主要收获

  • 字典数据写入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'])

你可能感兴趣的:(爬取糗事百科文字版)