主要收获
- 字典数据写入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'])