最近在想着爬一些有趣的网站,豆瓣淘宝京东,这些网站大多都被爬烂了,然后就想着爬点简单点的,例如黄色网站啥的是吧,男生一般都会有几个自己知道的网站,不过这里就不讨论细节问题了,直接撸代码。
源代码虽然很简单,不过迟点也会上传到github上面。
开发环境: python3.6.1+window64+idea14
使用到的第三方库:
pymysql xlrd xlwt xlutils beautifulsoup requests
-
声明一个爬虫类Crawer,requests负责抓取目标网页信息
-
获取到目标信息后,使用beautifulsoup解析
-
判断添加到数据库,这里我们只添加到xls,最终文件想要的私聊
#声明爬虫类 class Crawer: def __init__(self):#初始化操作 def run(self,start_url):#开始运行 def downloadHtml(self,url):#加载目标网页数据 def getFilmCategory(self,url):#获取电影分类列表 def getCategroysFilmList(self,url):#获取电影分类列表内容 def getFilmInfo(self,url):#获取电影详情数据 def saveFilmInfo(self,filminfo):#保存电影相关数据 #py是面向对象的编程语言 #声明电影实体类,不需要声明其他对象,电影详情包括,名称,时间,来源等等很多,我们就简单点 #保存电影的:名称,分类,图片,时间,下载链接,详情页链接 class filminfo: def __init__:pass class film: def __init__:pass
现在写requests爬取数据:
#导入requests第三方库,如果没下载的使用pip install requests就可以下载了,兼容2.x和3.x
import requests;
def __init__(self):
self.session= requests.session()
def download(self,url):
res = self.session.get(url)
if res:
#判断如果有返回,那么就对获取到的html数据进行解析
return text.encode('raw_unicode_escape').decode('utf-8')
def run(self,index):
#先获取到首页的html数据
indexhtml = self.download(index)
categorys = self.getFilmCategory(indexhtml);
for category in categorys:
categroysfilm = film()
categroysfilm.haveNext = true;
while categroysfilm.haveNext :
categroysfilm = self.getCategroysFilmList(categroy)
filmlists = categroysfilm.list
for film in filmlists:
info = self.getFilmInfo(film)
self.saveFilmInfo(info)
我们把保存数据的操作写了,最后再把涉及到html解析的部分补上来。。
def getFilmInfo(self,info):
#声明数据保存的xls文件
fileName = 'film.xls'
#文件不存在新建一个文件并添加一张sheet
if not os.path.exists(fileName):
w = xlwt.Workbook()
w.add_sheet('file')
w.save(fileName)
#先将当前的工作表复制一份,计算出当前表里有多少条数据,在其后面添加
#完成后将workbook保存
rb = xlrd.open_workbook(fileName)
wb = copy(rb)
ws = wb.get_sheet(0)
index = rb.sheets()[0].nrows
print('当前行数{0}'.format(index))
ws.write(index, 0, index)
ws.write(index, 1, filminfo.filmName)
ws.write(index, 2, filminfo.filmCategory)
ws.write(index, 3, filminfo.filmImgUrl)
ws.write(index, 4, filminfo.filmTimeStamp)
ws.write(index, 5, filminfo.downloadUrl)
ws.write(index, 6, filminfo.filmUrl)
wb.save(fileName)
最后就到获取到的html解析过程了:
使用谷歌浏览器F12-右键目标html代码-copy-选择copy selector,会得到目标代码的html相对位置信息
body > div:nth-child(10) > div > ul > li:nth-child(1) > li
根据这些数据来进行beautifulsoup定位
from bs4 import beautifulsoup as bsoup
def getFilmCategory(self,indexhtml){
bs = bsoup(index,'html.parser')
li =bs.find_all('div')[10].find('div').find('ul').find_all('li')[1].find('li')
#debug一下看是否定位到自己想要的目标位置
}
okay,写完,我是不会告诉你们网址的。。。23333333
网友评论