>
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据
urlopen(url,data=None,header={},,)data没有默认为get方法,有的话为post方法
简单的爬虫翻译:
data格式化: data = urllib.parse.urlencode(data)encode(‘…’)
response = urllib.request.urlopen(url,data)
html = response.read().decode(‘utf-8’)
target = json.loads(html)
隐藏:
更改header里的User-Agent信息
req = urllib.request.Request(url,data)
req.add_header(‘User-Agent’,’Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36’)
response = urllib.request.urlopen(req)
休眠一段时间
time.sleep()
使用代理
爬取网址图片:
查找页码:
a = html.find(‘page-numbers current’) + 22
b = html.find(‘<’,a)
return (html[a:b])
查找图片网址:
a = html.find(‘img src=’)
while a != -1:
b = html.find(‘.jpg’,a,a+255)
if b != -1:
img_addrs.append(html[a+9:b+4])
else:
b = a+9
a = html.find('img src=',b)
保存图片:
for each in img_addrs:
filename = each.split(‘/’)[-1]
with open(filename,’wb’) as f:
img = url_open(each)
f.write(img)
正则表达式:
import re
re.search(target,subject)
xxx{0,3}匹配0到3次
匹配0-255的数字
r’[01]\d\d|2[0-4]\d|25[0-5]’
匹配ip地址:
r’(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5]).){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])’
r’(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5]).){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5]))’
元字符:
. 匹配除换行符外任何符号
A|B匹配模式A或者模式B
^A 从开始位置匹配A
B$ 从结束位置匹配B
\ 将一个普通字符变为特殊符号
解除元字符的特殊功能
\1 数字1-99匹配序号组的的模式(A)\1 == (A)(A)
\060 代表八进制060所表示的ascii值对应的值 \060 ==0
[A] 代表一个字符类,在括号中的所有元字符失去特殊功能(除去- \ ^)
[^A]表示不匹配A
{M,N}匹配M次到N次
* 匹配0次或多次
+ 匹配1次或多次
? 匹配0次或1次
贪婪模式(默认):匹配尽可能多的字符<.+>
非贪婪模式:<.+?>第一次匹配到>就停下来
\b 匹配单词边界 例如\bmile\b 不匹配smile
\B 匹配非单词边界
\d 匹配数字
\D 匹配非数字
\s 匹配空白字符:\t \n \r \f换页 \v垂直制表
\S 相反
\w 匹配任何unicode的单词字符 如果设置re.ASCII 只匹配[a-zA-Z0-9]
\W 相反
编译正则表达式:
pat = re.compile(r’xxxx’)
pat.search(html)
urllib.request.urlretrieve(url,file,None)获取url内容并下载在file中
match = re.search(A,B)
match.group()全部匹配字符串 其他子组从序号0开始,右边开始第一个括号开始的子组
match = re.findall(p,html)
返回一个子组的元组
?:非捕获组
网页访问的异常:
import urllib.error
urllib.error.URLError as e: e.reason
urllib.error.HTTPError as e: e.code返回错误码
本来该写点Scrapy的用法的,可惜倒腾了一天没装成功,等以后装好再写吧…