爬取豆瓣TOP250

from requests_html import HTMLSession

#新建一个html文件,将相应的代码放入,运行查看结果,如果页面全部渲染则直接根据页面信息获得数据;
#如果指定部分没有代码,则是通过ajax提交渲染的结果,需要通过控制台找到指定的后台接口
#session=HTMLSession()
# r=session.get('https://movie.douban.com/top250')
# print(r.text) class douban250():
def __init__(self):
self.session=HTMLSession()
#请求头,根据请求网页决定是否需要
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
} #请求路径,一共十页每页25条数据
def get_url(self):
for i in range(10):
#这里一定要注意要将i*25放在括号内,否则数据会出错
yield 'https://movie.douban.com/top250?start=%s&filter=' % (i*25) def get_data(self,url):
r=self.session.get(url=url,headers=self.headers)
elements_list=r.html.find('li .item>.pic')
for element in elements_list:
#电影详情链接
links_url=element.find('a',first=True).attrs.get('href')
#电影排名
range=element.find('em',first=True).text
#电影名
mov_name=element.find('a>img',first=True).attrs.get('alt')
#电影封面
img_url=element.find('a>img',first=True).attrs.get('src')
print(range,mov_name)
print(links_url)
yield img_url,mov_name def save_img(self,img_url,img_name):
r=self.session.get(img_url)
img_path=os.path.join('豆瓣250图片',img_name+'.jpg')
with open(img_path,'wb') as f:
f.write(r.content)
print('%s下载完毕'%img_name) #运行函数,获得路径
def run(self):
for url in self.get_url():
for img_url,mov_name in self.get_data(url):
self.save_img(img_url,mov_name) if __name__ == '__main__':
a=douban250()
a.run()

爬取校花网图片

from requests_html import HTMLSession
import os class spider():
def __init__(self):
self.session = HTMLSession()
self.headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
} def get_index_url(self):
for i in range(1,4):
#因为第一个页面是没有页面索引的
if i == 1:
yield 'http://www.xiaohuar.com/meinv/index.html'
else:
yield 'http://www.xiaohuar.com/meinv/index_%s.html'%i def get_img_name(self,index_url):
r = self.session.get(url=index_url,headers=self.headers)
elements_list = r.html.find('#images .items')
for element in elements_list:
img_url:str = element.find('img',first=True).attrs.get('src')
#因为爬取得数据有些是绝对路径有些是相对路径,所有需要拼接
if not img_url.startswith('http'):
img_url = 'http://www.xiaohuar.com' + img_url
#文件名不能出现左斜杠或者右斜杠,空格没问题
img_name = element.find('.p_title>a',first=True).text.replace('\\','').replace('/','') + '.jpg'
yield img_url,img_name def save_img(self,img_url,img_name):
r = self.session.get(url=img_url)
#新建一个存放图片的文件夹名叫‘校花图片’
img_path= os.path.join('校花图片',img_name)
with open(img_path,'wb') as f:
f.write(r.content)
print('%s下载完毕'%img_name) def run(self):
for index_url in self.get_index_url():
for img_url,img_name in self.get_img_name(index_url):
self.save_img(img_url,img_name) if __name__ == '__main__':
xiaohua = spider()
xiaohua.run()

爬取豆瓣电影分类页面

import requests_html

#新建一个html文件,将相应的代码放入,运行查看结果,如果页面全部渲染则直接根据页面信息获得数据;
#如果指定部分没有代码,则是通过ajax提交渲染的结果,需要通过控制台找到指定的后台接口
# session=requests_html.HTMLSession()
# url='https://movie.douban.com/tag/#/?sort=U&range=0,10&tags=2018'
# r=session.get(url)
# print(r.text) class spider():
def __init__(self):
#通过控制器NETWORK的XHR也就是json格式的数据找到的接口路径,注意结尾加问号
self.api='https://movie.douban.com/j/new_search_subjects?'
self.session=requests_html.HTMLSession() def get_params(self):
year_range=input('请输入年份')
sort=input('请输入排序规则(S按评分)')
countries=input('请输入电影的制作国家')
tags=input('请输入标签(如经典)')
print('tags:',tags) self.params={
'year_range':year_range,
'sort':sort,
'start':0,
# 'country':str(countryies.encode('utf8')).strip('b\'').replace('\\x','%').upper()
'countries':countries,
'tags':tags
} def get_data(self):
for i in range(1):
#点击加载更多按键,每次加载20条数据
self.params['start']=i*20
r=self.session.get(url=self.api,params=self.params)
print(r.json()) def run(self):
self.get_params()
self.get_data() if __name__ == '__main__':
douban=spider()
douban.run()

requests_html爬虫小练习的更多相关文章

  1. 基于webmagic的爬虫小应用--爬取知乎用户信息

    听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...

  2. 一个python爬虫小程序

    起因 深夜忽然想下载一点电子书来扩充一下kindle,就想起来python学得太浅,什么“装饰器”啊.“多线程”啊都没有学到. 想到廖雪峰大神的python教程很经典.很著名.就想找找有木有pdf版的 ...

  3. nodeJs爬虫小程序练习

    //爬虫小程序 var express = require('express'); //superagent是一个http的库,可以发起get和post请求 var superagent = requ ...

  4. 适合新手的Python爬虫小程序

    介绍:此程序是使用python做的一个爬虫小程序  爬取了python百度百科中的部分内容,因为这个demo是根据网站中的静态结构爬取的,所以如果百度百科词条的html结构发生变化 需要修改部分内容. ...

  5. java网络爬虫爬虫小栗子

    简要介绍: 使用java开发的爬虫小栗子,存储到由zookeeper协调的hbase中 主要过程是模拟Post请求和get请求,html解析,hbase存储 源码:https://github.com ...

  6. 福利贴——爬取美女图片的Java爬虫小程序代码

    自己做的一个Java爬虫小程序 废话不多说.先上图. 目录命名是用标签缩写,假设大家看得不顺眼能够等完成下载后手动改一下,比方像有强迫症的我一样... 这是挂了一个晚上下载的总大小,只是还有非常多由于 ...

  7. Python_爬虫小实例

    爬虫小实例 一.问题描述与分析 Q:查询某一只股票,在百度搜索页面的结果的个数以及搜索结果的变化. 分析: 搜索结果个数如下图: 搜索结果的变化:通过观察可以看到,每个一段时间搜索结果的个数是有所变化 ...

  8. Java豆瓣电影爬虫——小爬虫成长记(附源码)

    以前也用过爬虫,比如使用nutch爬取指定种子,基于爬到的数据做搜索,还大致看过一些源码.当然,nutch对于爬虫考虑的是十分全面和细致的.每当看到屏幕上唰唰过去的爬取到的网页信息以及处理信息的时候, ...

  9. python网页爬虫小项目开发

    这是我最近接的一个小项目,花了是整整四天多时间. 任务是将http://www.examcoo.com/index/detail/mid/7网站下所有的试卷里的试题全部提取出来,首先按照题型进行分类, ...

随机推荐

  1. tomcat的stratup小黑框名字修改

    Tomcat的bin目录下:catalina.out文件, TITLE就是Tomcat startup窗口的名称,282行默认是:Tomcat.这里建议改成“服务名+端口号”的方式,看起来一目了然.因 ...

  2. SSM框架启动报 org.apache.bval.jsr303.ConfigurationImpl.getDefaultParameterNameProvider

    今天在做项目,在启动的时候报了一个错.错误信息是org.apache.bval.jsr303.ConfigurationImpl.getDefaultParameterNameProvider. 原因 ...

  3. 启发式分治:2019牛客多校第三场 G题 Removing Stones

    问题可以转换为求有多少个区间数字的总和除2向下取整大于等于最大值.或者解释为有多少个区间数字的总和大于等于最大值的两倍(但是若区间数字总和为奇数,需要算作减1) 启发式分治: 首先按最大值位置分治,遍 ...

  4. 使用python实现希尔、计数、基数排序

    希尔排序 希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序. 首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为d1,在各组内进行直接插入排序. 取第二个整数d2=d1 ...

  5. html 局部打印

    首先有个调用的方法.printView(). function printView() { bdhtml = window.document.body.innerHTML;//获取当前页的html代码 ...

  6. upc组队赛5 Assembly Required【思维】

    Assembly Required 题目描述 Princess Lucy broke her old reading lamp, and needs a new one. The castle ord ...

  7. 【webpack】webpack之postcss-loader的基本使用---【巷子】

    一.postcss-loader简介 postcss-loader 用来对.css 文件进行处理,并添加在 style-loader 和 css-loader 之后.通过一个额外的 postcss 方 ...

  8. Python常用模块系列

    1.时间模块 import time,datetime # print(time.time()) #时间戳 # print(time.strftime("%Y-%m-%d %X") ...

  9. Django框架(二十八)—— Django缓存机制

    目录 Django缓存机制 一.什么是缓存 二.Django的6中缓存方式及配置(只需要改配置文件) 1.开发调试缓存(此模式为开发调试使用,实际上不执行任何操作) 2.内存缓存(将缓存内容保存至内存 ...

  10. java中传参的要点

    传参的是分为:值传递和引用传递,值传递不会改变值,传递的是这个值的副本(就是把这个值拿出来拷贝一份用拷贝的值):引用传递会改变值,传递的是这个值的“地址”: String是特殊的引用类型,用Strin ...