【爬虫】python爬虫
爬虫章节
1.python如何访问互联网
URL(网页地址)+lib=》urllib
2.有问题查文档:python document.
3.response = urllib.request.urlopen(""www.baidu.com)
html =html.decode("utf-8") 破除二进制的解码操作
4.读取网页图片 wb:二进制
urlopen=request + urlopen
- 浏览器--审查元素--查看Network(python提交POST表单)
(浏览器和客户端的通信内容)
GET:从服务器请求获得数据
POST:向指定服务器提交被处理的数据
8分45秒点击POST(translate?smartresult)
点开之后点击Preview就可以看到被翻译的内容。
(1)然后分析一下headers的内容
①Status Code:200 正常响应的意思 404表示不正常响应
②Request Headers服务器。一般通过下面的User-Agent识别是浏览器访问还是代码访问
③Form Data:POST提交的主要内容
(2)POST需要指定的data格式,可以通过parse转换格式
(3)代码实现翻译POST功能
import urllib.request
Import urllib,parse
url=’ ’ //Headers下面的Request URL
Data={ } //也就是Headers下面的From Data
Type:AUTO
I:l love FishC.com!
doctype:json
xmlVersion:1.6
Keyfrom:fanyi.web
Ue:UTF-8
typoRsult:true
Response = urllib.request.urlopen(url,data)
修改:
Data[‘type’] = ‘AUTO’
Data[‘i’]=’I love FishC.com!’
Data[‘doctype’] = ‘json’
Data[‘xmlVersion’] = ‘1.6’
Data[‘keyfrom’] = ‘fanyi.web’
Data[‘ue’] = ‘UTF-8’ UTF-8是对unicode很灵活的编码形式
Data[‘typoRsult’] = ‘true’
Urllib.parse.urlencode(data) //编码形式
Response = urllib.request.urlopen(url,data).encode (‘utf-8’) //python默认的是unicode形式
Html = response.read().decode(‘utf-8’) //把其他编码形式变成unicode形式
Print (html)
//输出的是一个json结构
Import json
Json.loads(html) //载入之后发现就是一个字典
Target = json.loads(html)
Type(target)
输出:<class ‘dict’> 字典形式
Target[‘translateResult’]
输出:[[{‘tgt’:’我爱FishC.com@’,’src’:’I love FishC.com!’}]]
>>>target[‘translateResult’][0][0][‘tgt’]
输出:’我爱FishC.com!’
经过以上的分析,代码如下:
Import urllib.request
Import urllib,parse
Import json
Content = input(“请输入需要翻译的内容:”)
Url = ‘http:..fanyi.youdao.com/translagte?smartresult=dict&smartresult=;xxxxx’
Data = {}
Data[‘type’] = ‘AUTO’
Data[‘i’]=’I love FishC.com!’
Data[‘doctype’] = ‘json’
Data[‘xmlVersion’] = ‘1.6’
Data[‘keyfrom’] = ‘fanyi.web’
Data[‘ue’] = ‘UTF-8’ UTF-8是对unicode很灵活的编码形式
Data[‘typoRsult’] = ‘true’
Urllib.parse.urlencode(data).encode(‘utf-8’) //编码形式
Response = urllib.request.urlopen(url,data)
Html = response.read().decode(‘utf-8’)
Target = json.loads(html)
Print(“翻译结果:%s” %(target[‘translateResult’][0][0][‘tgt’]))
- 修改headers模拟浏览器登录
(1)方法一:通过Request的headers参数修改
添加代码
Head = {}
Head[‘User-Agent’] = ‘ 把代码head里的user-agent拷贝过来即可’
(2)方法二:通过Request.add_header()方法修改
在req = urllib.request.Request(url,data,head)
Req.add_header(‘User-Agent’,’那个网站’)
- 防止网站对同一ip短时间内多次访问设置权限的方法
(1)延迟访问时间(不建议使用)
(2)代理
①参数是一个字典{‘类型’:’代理ip:端口号’}
Proxy_support = urllib.request.ProxyHandler({})
②定制、创建一个opener
Opener = urllib.request.build_opener(proxy_support)
③a.安装opener
Urllib.request.install_opener(opener)
B.调用opener
Opener.open(url)
(直接搜索代理ip就行)
Import urllib.request
Url = ‘http://www.whatismyip.com.tw’
Proxy_support = urllib.request.ProxyHandler({‘http’:’’119.6.144.73:81’})
Opener = urllib.request.build_opener(proxy_support)
Urllib.request.install_opener(opener)
Urllib.request.urlopen(url)
Html = response.read().decode(‘utf-8’)
Print(html)
④修改opener的headers如下:
Import urllib.request
Url = ‘http://www.whatismyip.com.tw’
Proxy_support = urllib.request.ProxyHandler({‘http’:’’119.6.144.73:81’})
Opener = urllib.request.build_opener(proxy_support)
Opener.addheaders = [(‘user-agent’,’就是那个网页的内容’)]
Urllib.request.install_opener(opener)
Urllib.request.urlopen(url)
Html = response.read().decode(‘utf-8’)
Print(html)
⑤建立多个ip
Import urllib.request
Import random //使用random,随机使用ip
Url = ‘http://www.whatismyip.com.tw’
Iplist = [‘119.6.144.73L81’,’183.203.208.166:8118’,’ ’]
Proxy_support = urllib.request.ProxyHandler({‘http’:’’random.choice(iplist’})
Opener = urllib.request.build_opener(proxy_support)
Opener.addheaders = [(‘user-agent’,’就是那个网页的内容’)]
Urllib.request.install_opener(opener)
Urllib.request.urlopen(url)
Html = response.read().decode(‘utf-8’)
Print(html)
- 抓取网站的前十页图片并保存(模块化)
Import urllib.request
Import os //在当前目录创建文件夹
Def get_page(url);
Req = urllib.request.Request(url)
Req.add_header(‘User-Agent’,’head网址’)
response
Def Find_imgs(url):
pass
Def save_imgs(folder,img_addrs):
pass
Def download_mm(folder=’ooxx’,pages=10): //pages表示下载10页
os.mkdir(folder) //创建文件夹的名字folder
Os.chdir(folder)
Url=”http://jandan.net/ooxx”
page_num =int(get_page(url))
For i in range(pages):
Page_num-=i
Page_url = url+’page-’+str(page_num) + ‘#comments’ //此时已经获取了地址
//接下来要打开网站获取图片的地址
Img_addrs = Find_imgs(page_url)
Save_imgs(img_addrs) //要熟悉明白模块化思维
If __name__ == ‘__main__’:
Download_mm()
附加:If __name__ == ‘__main__’作用:测试模块可用性。
9.想调用函数的话,直接输入一下就行了。
比如我定义了
Def url_open(url):
Req = urllib.request.Request(url)
Req.add_header(‘User-Agent’,’地址’)
Response = urllib.request.urlopen(url)
Html = response.read()
Return html
如果想在def get_page(url)里面使用url的话
就直接 html = url_open(url).decode(‘utf-8’)
也就是说其实这个是和数学上的函数引用一样的。
- 正则表达式
(1)search方法是在内容中找到第一次匹配成功的位置;
(2) . :表示任何文件名(不包括换行符),通配符
(3)如果想寻找.。就用\.
(4)\d:匹配一个所有数字
(5)匹配ip地址 :\d\d\d\.\d\d\d\.\d\d\d
(6)Re.search(r’[aeiou]],’I loce FishC.com!’)
(7)小横杠表示范围 [a-z] [0-9]
(8)限制匹配次数:re.search(r’ab{3}c’,’abbbc’)
(9)给匹配次数添加范围:re.search(r’ab{3,10}c’,’abbbbbbbc’)
(10)正则表达式没有十百千的概念,只有数字的概念
Re.search(r’[01]\d\d|2[0-4]\d|25[0-5]’,’188’) 0-255
(11){0,1}重复0次或者1次,0次就是表示不重复,可有可无,可以不存在。
- Scrapy
(1)Scrapy是爬虫的孙子兵法。
(2)
【爬虫】python爬虫的更多相关文章
- [爬虫]Python爬虫基础
一.什么是爬虫,爬虫能做什么 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.比如它在抓取一个网 ...
- 爬虫-Python爬虫常用库
一.常用库 1.requests 做请求的时候用到. requests.get("url") 2.selenium 自动化会用到. 3.lxml 4.beautifulsoup 5 ...
- [爬虫]Python爬虫进阶
请跳转到以下页面查看: 爬虫进阶
- @1-2初识Python爬虫
初识Python爬虫 Python爬虫(入门+进阶) DC学院 环境搭建: Python2与Python3的差异:python2与python3整体差异不大,大多是一些语法上的区别,考虑到py ...
- 记一次Python爬虫开发经历
为啥要做Python爬虫,是因为我去找电影的某个网站有点坑,它支持tag标签查询自己喜欢的电影,但是不支持双标签或者三标签查询.由于一个电影对应多种类型(tag),这就意味着,我需要进入这个电影介绍界 ...
- Python爬虫教程
Python爬虫(1):基本原理 Python爬虫(2):Requests的基本用法 Python爬虫(3):Requests的高级用法 Python爬虫(4):Beautiful Soup的常用方法 ...
- python爬虫--案例分析之针对简单的html文件
python爬虫常用的库:Python 库(urllib.BeautifulSoup.requests.scrapy)实现网页爬虫 python爬虫最简单案例分析: 对一个html文件进行分解,获取 ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- Python爬虫小白入门(一)写在前面
一.前言 你是不是在为想收集数据而不知道如何收集而着急? 你是不是在为想学习爬虫而找不到一个专门为小白写的教程而烦恼? Bingo! 你没有看错,这就是专门面向小白学习爬虫而写的!我会采用实例的方式, ...
- python爬虫成长之路(一):抓取证券之星的股票数据
获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...
随机推荐
- android 如何动态设置View的margin和padding
感谢大佬:https://blog.csdn.net/a107494639/article/details/7341077 1.动态设置padding,拿ImageView为例: ImageView ...
- linux 批量替换文件内容及查找某目录下所有包含某字符串的文件
转载请注明来源:https://www.cnblogs.com/hookjc/ 1. sed C代码 grep -rl matchstring somedir/ | xargs sed -i 's ...
- Java程序性能监控工具
系统性能监控: 确定系统运行的整体状态,基本定位问题所在 uptime命令 [root@localhost ~]# uptime23:19:38 up 244 days, 3:39, 34 users ...
- Java线程--Exchanger使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11868576.html Java线程--Exchanger使用: Exchanger 是用来交 ...
- eclipse使用的步骤
eclipse使用的步骤: 第一步: 选择工作目录. 以后在Eclipse上面写的所有代码都是在工作目录上的. 第二步: 在Project Exploer 窗口上创建一个工程,以后我们写代码都是以工程 ...
- Redis——(主从复制、哨兵模式、集群)的部署及搭建
Redis--(主从复制.哨兵模式.集群)的部署及搭建 重点: 主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 哨兵和集群都是 ...
- 「 题解 」P2487 [SDOI2011]拦截导弹
简单题意 给定 \(n\) 个数对 \((h_i, v_i)\). 求: 最长不上升子序列的长度. 对于每个 \(i\),分别求出包含数对 \((h_i, v_i)\) 的最长上升子序列的个数和最长不 ...
- Solution -「CF 1119F」Niyaz and Small Degrees
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个结点的树,边有边权,对于每个整数 \(x\in[0,n)\),求出最少的删边代价使得任意结点度数不超过 ...
- kubeasz 部署高可用 kubernetes 集群
文章目录 环境准备 配置模板机 配置hosts解析 配置ssh 免密钥登陆 kubeasz 部署服务准备 配置主机清单 部署集群 环境准备 IP HOSTNAME SYSTEM 192.168.131 ...
- MySQL表单查询
一.表单查询的语法 select 字段1.字段2....from 表名 where MySQL备份