爬取豆瓣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爬虫小练习 - Python技术站