# 一.爬虫
# 1.基本操作
# 排名爬虫刷票
# 抽屉网的所有发布新闻点赞
# 自动化程序模拟用于的日常操作
# 投票的机制是利用cookies,禁用cookies模式
# 自定义的异步IO模块就是Socket的客户端
# 基本操作:使用python登陆任何的网站,图片识别验证码比较困难,需要额外的图片识别或特殊api(伪造浏览器的任何行为)
# 2.性能相关的操作
# 用最短的时间:多线程多进程解决大并发操作
# 5个线程并发,共同等待有损耗,把5个线程等待时进行其他程序
# 并发方案:用异步IO,之前的并发采用5个线程,现采用一个线程 gevent/Twisted/asyncio/aiohttp傻瓜式封装调用方法
# 会用方法表现异步IO
# IO多路复用 Select
# 3.做一个属于自己的爬虫框架,以高性能的方式爬取网站
# 打包开源放在github上,知名的爬虫框架:Scrapy:封装了所有的爬虫常用的方法,具有异步IO的并发功能(Twisted)
# 给予Scrapy源码定义自定义框架
# 使用Scrapy框架
# 二.Tornado 异步非阻塞特性框架
# 1.Tornado的基本使用,分析源码功能,可以快速基于Tornado的单表的增删改查。小示例感受
# 2.Toanado的源码剖析
# 3.异步非阻塞的就是Soctek的服务端
###################################################################################################################
#爬虫的基本知识
# 什么是爬虫?
# 互联网最开始根本没有百度、Google、Bing等,如果想要访问网站只能记住域名,很久之前是大黄页,一本书包含了各自域名的地址
# 想要访问网站就必须用文档记录找到文档检查,这样是十分麻烦的,文档内容多会很麻烦,于是诞生了搜索引擎,
# 通过自动程序抓取网站。做搜索引擎的来做大黄页,通过客户需求找到,客户提交信息至搜索引擎,收集信息给提供客户
# 百度通过机器人抓取关键字,提取信息。
# 网络信息都是息息相关的,友情链接到别的网站,机器人爬取网站所有的<a>标签,肯定有超链接,实际就是一个关系网的互相联系
# 把爬虫放在一个网站,自动化程序任意查找,具有定向和非定向
# 定向:只爬取某一个或某几个指定网站
# 非定向:爬取很多内容
# 公众号通过找网络上的合适资源爬取信息
# 租房信息的爬取
# 请求:http请求本质是一个字符串,包裹在整个的HTML的页面里的所有的标签内的信息,找到想要的标签信息(写组合正则表达式),
# python不用重复的写正则表达式,有开源的模块(类库)帮助实现
# 1.request模块访问网站
# pip3 install requests
# request.get('http:www.baidu.com')
# response.text
# 2.beautisoup模块
# pip3 install Beautisoup4
# from bs4 import Beautisoup
# soup = Beautisoup(response.text)这个HTML被转换为对象,对象可以嵌套对象,HTML的父子关系(对象嵌套)
# target = soup.find(id = 'auto-channel-lazyload-article')标签嵌套对象,找对象
# print (target)
###########################################################################################################
# 小结:
# 需求一:
# response = request.get('url')
# response.text
# response.content
# response.encoding
# response.aparent_encoding
# response.status_code
# soup = beautifulsoup('HTML')
# soup.find('div)
# soup = find(id='i1')
# v1 = soup = find('div, id = 'i1')两个参数可以作为组合条件
# v2 = soup = find_all('div, id = 'i1')参数与find相同,返回的内容是列表了
# v1是对象,v2是列表
# v1.text直接拿到文本 v2[0].text
# 需求二:
# 通过脚本程序自动登陆GitHup[其他网站]
# requests,访问网站需要输入用户名和密码,页面刷新使用form表单,没刷新使用AJAX提交
# post_dict = {
# "phone":'111111',
# "password": 'xxx',
# 'oneMonth':1
# }
# response = request.post(
# url = 'https://dig.chouti.com/login',
# data = post_dict
# )
#print(response.text)
# cookie_dict = response.cookies.get_dict()
###########################################################################################################
# 1.基本的模块的使用
# 2.模拟登陆
# 3.各个网站的套路不同
###########################################################################################################
# 三、模块的详细使用
# requests
# -方法关系:
# rquests.get(..)
# rquests.post(..)
# rquests.put(..)
# rquests.delete(..)
######以上都是request方法
# ——参数
# rquests.rquest:
# -method:提交方式
# -url:提交地址
# -params:在url上传递的参数放入GET,如果访问的是www.baidu.com,如果params = {'k1':'v1'}
# requests.request(
# method = 'GET',
# url = 'www.baidu.com',
# params = {'k1':'v1','k2':'v2'}
# )
# 提交后运行的结果为:http://www.baidu.com?k1=v1&k2=v2
# -data:在请求体里传递的数据,可以是字典、字节或文件对象
# requests.request(
# method = 'POST',
# url = 'www.baidu.com',
# params = {'k1':'v1','k2':'v2'},
# data = {'use':'xxx','pwd':'123'},或者data = 'user=xxx&pwd=123123'
# )
# -json:在请求体里传递数据,会把参数json.dump变成整体的字符串传递(字典中嵌套字典时使用)
# requests.request(
# method = 'GET',
# url = 'www.baidu.com',
# json = {'use':'xxx','pwd':'123'},>>>>请求头:content-typ:application/json;请求体:"{'use':'xxx','pwd':'123'}"
# )
# ######Django会根据发送的请求头的内容判断是否需要将请求体的内容进行POST的json转换
# - headers:请求头,爬取各种网站需要附加请求头
# 手写一个上一次访问的网站 headers = {
# Referer:'http;//www.baidu.com'
# 'User-Agent'>>可以伪造任何浏览器形式,来自什么设备
# }
# 网址参考:http://www.cnblogs.com/wupeiqi/articles/6283017.html
# -cookies:Cookies
# cookies是放在请求头里的
###########################################################################################################
# -files:上传文件'name':文件名(文件对象)
# requests.post(
# url='xxx',
# files = {
# 'f1':open('s1.py','rb'),
# 'f1':('上传至服务器端的文件名',open('s1.py','rb))
# }
# )
######
# -auth:认证,加密放在请求头里
# -timeout:超时,两个时间>>1.发送的时间;2.等待的时间
# -allow_redirects 是否允许重定向
# -proxies:代理,开发投票的网站只能使用同一个ip,不介入代理的话是不能修改的
# ret = requests.post(
# url='https://dig.chouti.com/link/vote?linksId=20162281',#某一个新闻的点赞url
# cookies = {'gpsd':'601f5ba78f2a5fdb1d374817117eca80'},#得到的gpsd
# #HTTPS记得加请求头呦
# headers = {'User-Agent':
# 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
# ' Chrome/66.0.3359.181 Safari/537.36'},
# proxys = {
# 'http':'http://4.19.128.5:8099'代理服务器,代理方发送
# }
# )
######
# -stream:流式传输(一点一点下载文件)循环式下载 for i in r.iter_content()
# -verify:
# -cert:
import requests
from bs4 import BeautifulSoup
response = requests.get(url='https://www.autohome.com.cn/news/')
# response.encoding = 'gbk'
# 下载的过程中是字节,必须用它的方式发来后再反解
# 用原网页的编码方式反解:response.encoding = response.apparent_enconding
response.encoding = response.apparent_encoding #等于response.encoding = 'gbk'
# print(response.text)
soup = BeautifulSoup(response.text, features='html.parser')
#将文本转换为对象,features表示以什么内置的处理方式转换:1.lxml;2.html.parser
# lxml性能更好
target = soup.find(id = 'auto-channel-lazyload-article')
# print(target)
# 继续缩小范围去找
li_list = target.find_all('li')
# find_all找到的是一个列表的汇总,本身已经没有soup对象的方法了,需要再用方法需要用list_all[0]拿到列表的某一个值
# print(li_list)
for i in li_list:
a = i.find('a')
if a:
print('http:'+a.attrs.get('href'))#attrs表示找到对象的所有的属性,href就是标签的属性
txt = a.find('h3') #拿到的h3是什么类型?print显示的是字符串,实际是对象,打印显示的是对象,需要加文本信息
print(txt.text)
img_url = 'http:'+a.find('img').attrs.get('src')#小练习:拿到a标签下的img标签的src属性
print(img_url)
img_response = requests.get(url=img_url)
import uuid
file_name = str(uuid.uuid4()) + '.jpg'
with open(file_name,'wb') as f:
f.write(img_response.content)#content意思是以字节的形式保存文件
import requests
# from bs4 import BeautifulSoup
# url = "https://huan.moe/"
# response = requests.get(url)
# response.encoding = response.apparent_encoding
# # print(response.text)
# soup = BeautifulSoup(response.text, features='html.parser')
# target = soup.find(attrs={'class','g-desktop-1-4 g-tablet-1-2 g-phone-1-2 archive-general card general type-post status-publish format-standard hentry'})
# print(target)
post_dict = {
"phone":'*******',
"password": '******',
'oneMonth':1
}
response = requests.post(
url = 'https://dig.chouti.com/login',
data = post_dict,
) print(response.text)
cookie_dict = response.cookies.get_dict()
print(cookie_dict)
res = requests.get(
url='https://dig.chouti.com/profile',

)
print(res.text)
import requests
#抽屉网gpsd验证点赞法
ret = requests.post(
url='https://dig.chouti.com/link/vote?linksId=20162281',#某一个新闻的点赞url
cookies = {'gpsd':'601f5ba78f2a5fdb1d374817117eca80'},#得到的gpsd
#HTTPS记得加请求头呦 )
print(ret.text)

抽屉网点赞方法

import requests
r1 = requests.get('https://dig.chouti.com/',
)
r1_cookies = r1.cookies.get_dict()
print(r1_cookies) post_dict = {
"phone":'llllllll',
"password": 'llllllll',
'oneMonth':1
}
r2 = requests.post(
url = 'https://dig.chouti.com/login',
data = post_dict, cookies = r1_cookies,
)
print(r2.text)
# r2_cookies = r2.cookies.get_dict()
# print(r2_cookies)
# r2_cookies = r2.cookies.get_dict()
# print(r2.text)
# cookie_dict = r2.cookies.get_dict()
# print(cookie_dict)
# res = requests.get(
# url='https://dig.chouti.com/profile',
#
#
# )
# print(res.text)
r3 = requests.post(
# url='https://dig.chouti.com/profile',
url='https://dig.chouti.com/link/vote?linksId=20160191', cookies = {'gpsd':r1_cookies.get('gpsd')}
)
print(r1_cookies.get('gpsd'))
print(r3.text)

抽屉网组合拳(有点小心机)

爬虫来啦!Day91的更多相关文章

  1. 设计爬虫Hawk背后的故事

    本文写于圣诞节北京下午慵懒的午后.本文偏技术向,不过应该大部分人能看懂. 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk.我花不少时间优化和推广它,得到的评价还算比较 ...

  2. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  3. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  4. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  5. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  6. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  7. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  8. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. QQ空间动态爬虫

    作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...

随机推荐

  1. SQL基本语句:2.基本表

    SQL基本表的增删改

  2. CDR X7 限时3折618年中大促,是时候出手了!

    力量与激情.胜利与喜悦,这些自带饱满情绪的词,即将“刷屏”这个夏天!32支球队,28个不眠夜,你将与谁度过? 一场视觉上的饕餮盛宴即将开始! 小编也是个疯狂足球迷,虽然中国队无缘今年的俄罗斯世界杯,但 ...

  3. JavaScript中的线程与进程

    定义: 线程分为:单线程和多线程 单线程:一个正在运行的程序(即进行)至少有一个线程,这个线程叫做主线程,只有一个主线程的程序叫做单线程程序,主线程负责执行所有代码的执行(UI展现及刷新.网络请求.本 ...

  4. echarts的下载为excel小工具

    echarts自带有下载为图片的功能,但是没有下载为excel表格的功能,个人觉得下载为表格更为需要,所以写了个工具,此工具应用有局限性,只能用于柱形图和折线图,option的series要是如下形式 ...

  5. Cookie和Session有什么区别

    1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识别具体的用户,这个机制就是Session.   典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状 ...

  6. Codeforces 679A Bear and Prime 100

    链接:传送门 题意:给你一个隐藏数,这个隐藏数在[2,100]之间,现在最多可以询问20次,每次询问的是这个数是不是隐藏数的底数,是为yes,不是为no,每次询问后都需要flush一下输出缓冲区,最后 ...

  7. 大数据相关文档&Api下载

    IT相关文档&Api下载(不断更新中) 下载地址:https://download.csdn.net/user/qq_42797237/uploads 如有没有你需要的API,可和我留言,留下 ...

  8. pytorch 6 batch_train 批训练

    import torch import torch.utils.data as Data torch.manual_seed(1) # reproducible # BATCH_SIZE = 5 BA ...

  9. 2019-03-20 用SSIS把Excel中的数据导出来保存到SQLServer中

    Control Flow 1.配置 好 图形 2.去变量那 配置好 文件路径 和 存储过程 3.在SQL Server创建对应的存储过程,该存储过程的功能是每次导入是清空原有的数据 4.如果不懂的参考 ...

  10. RabbitMQ消息可靠性分析 - 简书

    原文:RabbitMQ消息可靠性分析 - 简书 有很多人问过我这么一类问题:RabbitMQ如何确保消息可靠?很多时候,笔者的回答都是:说来话长的事情何来长话短说.的确,要确保消息可靠不只是单单几句就 ...