本篇文章将爬取零度编程的列表 传送门
我们只爬取如下的列表
废话不多说 上代码 很菜 大神勿喷
# -*- coding: utf-8 -*-
# Auth Ethan
# 爬取零度编程网站的数据
import requests
from bs4 import BeautifulSoup
from multiprocessing.dummy import Pool as ThreadPool
url="https://www.xcode.me/page/"
img=[]
data=[]
urls=[]
def page_one(u):
#伪装成浏览器 否则无法访问
ha={
'Accept': 'text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, image / apng, * / *;q = 0.8',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'Content-Type':'text/html; charset=utf-8'
}
res=requests.get(u)
result=BeautifulSoup(res.text,"lxml")
for item in result.select("article.excerpt"):
#获取图片链接
try:
src = item.select("a img.thumb")[0]["data-src"]
except:
src=item.select("a img.thumb")[0]["src"]
img.append(src)
#获取标题
title=item.select("header h2")[0].text
#获取时间
time=item.select("p.meta time")[0].text
#获取阅读数
look=item.select("p.meta .pv")[0].text.lstrip("阅读(").rstrip(")")
#请求内容页面
detail=BeautifulSoup(requests.get(item.select("header h2 a")[0]["href"]).text,"lxml")
#获取内容 将最后18位字符窜去掉 单独爬取
content=str( detail.select("article.article-content")[0].text.strip("\n")[:-18])
newpwd=detail.select("article.article-content p span")
if len(newpwd)>0:
if "下载密钥:" in newpwd[0].text:
downPwd = newpwd[0].text.strip("下载密钥:")
downUrl = detail.select("article.article-content p a")[0]["href"]
else:
downPwd=""
downUrl=""
else:
downPwd = ""
downUrl = ""
data.append({'ImgUrl':src,'Title':title,'Time':time,'Look':look,'Content':content,'downPwd':downPwd,'downUrl':downUrl})
def CreateUrl():
for a in range(0,21):
urls.append(url+str(a))
def Start():
CreateUrl()
pool = ThreadPool(4)
results = pool.map(page_one, urls)
pool.close()
pool.join()
#page_one(1)
print(data)
from pymongo import MongoClient
settings = {
"ip":'localhost', #ip
"port":27017, #端口
"db_name" : "python", #数据库名字
"set_name" : "linduBlog" #集合名字
}
class MyMongoDB(object):
def __init__(self):
try:
self.conn = MongoClient(settings["ip"], settings["port"])
except Exception as e:
print(e)
self.db = self.conn[settings["db_name"]]
self.my_set = self.db[settings["set_name"]]
def insert(self,dic):
print("inser...")
self.my_set.insert(dic)
def update(self,dic,newdic):
print("update...")
self.my_set.update(dic,newdic)
def delete(self,dic):
print("delete...")
self.my_set.remove(dic)
def dbfind(self,dic):
print("find...")
data = self.my_set.find(dic)
for result in data:
print(result["name"],result["age"])
if __name__ == '__main__':
Start()
# newdata=[{'ImgUrl': 'https://www.xcode.me/wp-content/uploads/2014/05/book-share-list.jpg', 'Title': '《.NET安全揭秘》电子书', 'Time': '2017-09-09', 'Look': '374', 'Content': '作为.NET程序员、.NET应用架构师和.NET安全工作人员,如何才能开发和设计出安全的.NET应用?如何才能维护和保证.NET应用系统的安全性?本书是资深.NET专家和安全专家多年工作经验的结晶,深刻揭示了.NET系统的安全特性及其工作原理,系统而全面地讲解了构建安全的.NET应用所必须掌握的所有理论知识,并包含大量实践。\n第一部分:.NET安全基础,透彻讲解了.NET体系结构、程序集与反射、应用程序域和CLR寄宿等核心技术,这部分内容是.NET架构的核心,同时也是理解.NET底层安全机制的基础。\n第二部分:.NET平台安全性,深入分析了代码访问的安全性和基于角色的安全性的原理,这部分内容既是.NET应用框架安全性的基础,也是整个.NET平台体系安全性的核心。\n第三部分:数据安全,深刻阐述了数据加密、数据存储和数据通信的安全性,这部分内容介于.NET平台底层安全性与.NET应用安全性之间,是联系二者的纽带。\n第四部分:.NET应用安全性,全面讲解.NET平台下ASP.NET、WCF、WPF和Open XML等常用框架和技术的安全机制与原理。\n第五部分:高级扩展,重点介绍WIF框架和Windows Azure的安全性,这是.NET安全领域未来的重心之一。\n本书是构建安全.NET应用的百科全书,适合所有关注和学习.NET安全的读者阅读。', 'downPwd': 'szff', 'downUrl': 'https://pan.baidu.com/s/1dEX5Jc1'}]
# print(newdata)
m=MyMongoDB()
m.insert(data)
#print(len("\n下载密钥:fsic\n零度电子书下载"))