爬虫学习(一)

1.1
(1)GET与POST请求:
当我们在浏览器中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL中。至于POST请求,它大多于表单提交时发起,其数据是以表单形式传输,并不会体现在URL中。
二者区别:
a、GET是请求页面并返回页面内容,其请求中的参数包含在URL中,数据可以在URL中看到,而POST请求的URL中不会包含这些数据,数据大都是通过表单形式传输的,会包含在请求体中。
b、GET请求提交的数据最多只有1024字节,而POST方式没有限制。
一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用GET方式请求的话,密码就会暴露在URL中,造成密码泄露,所以这里最好以POST方式发送。上传文件时,由于文件内容过大,也会用POST方式。
(2)我使用requests中的.get()方法向百度(https://www.baidu.com/)发出了一个请求,源码如下:
import requests
url=“https://www.baidu.com/
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
except:
print(“请求失败!”)
很不幸,第一次请求失败,我过些时间再次请求,终于成功,返回结果如下:在这里插入图片描述
如果断了网络,会怎么样呢?我去除异常处理结构,得到返回结果如下:Failed to establish a new connection: [Errno 11004] getaddrinfo failed’))。很显然因为无网络连接,无法发出请求与服务器建立连接。
(3) 至于申请返回的状态码,我们常用它来判断请求是否成功,而requests还提供了一个内置的状态码查询对象requests.codes,我们可以通过比较返回码(r.status_code)和内置的成功码,来保证请求得到了正常的响应,一般成功的状态码是200,404代表页面未找到,500代表服务器内部发生错误,等等。
(4)请求头:用来说明服务器要使用的附加信息,比较重要的有Cookie、Referer、User-Agent等。
Cookie:客户端的Cookie就是通过这个请求头属性传给服务端的。
Accept :请求报头域,可通过一个“Accept”请求头属性告诉服务端客户端接受什么类型的响应。
Referer :表示这个请求是从哪个URL过来的。
User-Agent:它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫是附加上此信息,可以伪装为浏览器;否则,很可能会被识别出爬虫。
等等。
1.2正则表达式
我们直接上实例(爬取豆瓣TOP250电影信息),源码:
import requests
import re
from requests.exceptions import RequestException
import json
import time
def get_one_page(url):
try:
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36’
}
r= requests.get(url, headers=headers)
if r.status_code == 200:
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
return None
except RequestException:
return None

def parse_one_page(html):
pattern = re.compile(’.?(.?).?src="(.?)".?(.?).?

.?: (.?)&.?’,re.S)
items = re.findall(pattern, html)
for item in items:
yield {
‘index’:item[0],
‘image’:item[1],
‘title’:item[2],
‘director’:item[3]
}

def write_to_file(content):
with open(‘result.text’,‘a’,encoding=‘utf-8’) as f:
f.write(json.dumps(content,ensure_ascii=False)+"\n")

def main():
url = “https://movie.douban.com/top250
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)

if name == ‘main’:
main()
print(“爬取成功!”)
运行结果:在这里插入图片描述
我个人认为正则太麻烦,出错爬不到也不容易找到哪出错了,推荐bs4等解析库,过几天我会用bs4爬一次,到时更新!
参考文献:python3网络爬虫开发实战,崔庆才著。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值