【爬虫】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

  1. 浏览器--审查元素--查看Network(python提交POST表单

(浏览器和客户端的通信内容)

  GET:从服务器请求获得数据

  POST:向指定服务器提交被处理的数据

  845秒点击POSTtranslatesmartresult

  点开之后点击Preview就可以看到被翻译的内容。

(1)然后分析一下headers的内容

Status Code200  正常响应的意思   404表示不正常响应

Request Headers服务器。一般通过下面的User-Agent识别是浏览器访问还是代码访问

Form DataPOST提交的主要内容

(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’]))

 

  1. 修改headers模拟浏览器登录

1)方法一:通过Requestheaders参数修改

添加代码

Head = {}

Head[‘User-Agent’] = ‘ 把代码head里的user-agent拷贝过来即可

(2)方法二:通过Request.add_header()方法修改

req = urllib.request.Request(url,data,head)

Req.add_header(‘User-Agent’,’那个网站’)    

 

  1. 防止网站对同一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)

 

 

④修改openerheaders如下:

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)

 

 

  1. 抓取网站的前十页图片并保存(模块化)

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. 正则表达式

(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次就是表示不重复,可有可无,可以不存在。

 

  1. Scrapy

(1)Scrapy是爬虫的孙子兵法。

 

(2)

转载于:https://www.cnblogs.com/osmondwang/p/7764406.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值