博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫之web内容获取(一)
阅读量:6329 次
发布时间:2019-06-22

本文共 3130 字,大约阅读时间需要 10 分钟。

  hot3.png

Python爬虫之web内容获取:

  • 一:简单的向服务器发送请求方式:

    # -- coding:utf-8 --​import urllib2​向指定的url 发送请求,并返回响应的类文件对象​response = urllib2.urlopen("http://www.baidu.com")​服务器返回的对象支持python文件对象的方法​read()方法:读取文件的全部类容,返回字符串​html = response.read()​print html

    但这样的方式往往容易被反爬虫者发现,因此我们需要进一步的伪装。

  • 反爬虫第一步:

首先,我们需要了解浏览器在向服务器发送请求时做了什么:这里我们可以用Fiddler抓包工具来实现下载安装配置好Fiddler(具体配置方法)后,当我们浏览器端向服务器发送请求时(如在浏览器访问),在Fiddler抓包工具抓到的文件中对应的百度链接的文件所对应的此处便能得到如下的Header请求信息。

        

Fiddler抓包工具Header请求信息

# 请求方式(GET / POST /...)GET https://www.baidu.com?&t=1520930345744&sid=1455_13549_21088_20928 HTTP/1.1​# 指定被请求资源的Internet主机和端口号Host: www.baidu.com​# 链接方式( keep-alive / close /...)Connection: keep-alive​# 浏览器端可以接受的媒体类型Accept: text/plain, /; q=0.01X-Requested-With: XMLHttpRequest​# User-Agent告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Referer: https://www.baidu.com/​# 览器申明自己接收的编码方法,通常指定压缩方法Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9​#本地Cookie信息Cookie: BAIDUID=955895CE3A39E426AF6E5CF53F2B:FG=1; BIDUPSID=955895CE3A39E426AF53F2B;

拿到浏览器请求的Header信息后,接下来我们便可以模拟浏览器访问服务器了如下:

  • 模拟get请求:

    # -*- coding:utf-8 -*-from urllib import request,parse​url = "http://www.baidu.com/s"kwd = input("请输入需要查询的关键字:")wd = {"wd":kwd}#将一个字典类型的数据转化为字符串类型(url:  "wd=875398%jsjdj%")wd = parse.urlencode(wd)​fill_url = url + "?" + wd​header = {    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}​#通过urllib2.Resquest()方法构造一个请求对象req = request.Request(fill_url,headers = header)​#向指定的url 发送请求,并返回响应的类文件对象response = request.urlopen(req)#服务器返回的对象支持python文件对象的方法#read()方法:读取文件的全部类容,返回字符串html = response.read()​print(html)
  • 模拟post请求\利用本地Cookie获取需要登陆后才能获取的内容:

    #!/usr/bin/python#-*- coding:utf-8 -*-​from urllib import request,parse#import json​url = "https://mail.qq.com/cgi-bin/frame_html?t=frame_html&sid=3-L3dxbAFqMTDGY8&url=/cgi-bin/mail_list?folderid=8%26folderkey=8%26page=0%26t=mail_list_group%26ver=236935.0%26cachemod=maillist%26cacheage=7200%26r="​header = {    "Host": "mail.qq.com",    "Connection": "keep-alive",    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like     Gecko) Chrome/64.0.3282.186 Safari/537.36",    "Accept": "image/webp,image/apng,image/*,*/*;q=0.8",    "Accept-Language": "zh-CN,zh;q=0.9",    "Cookie": "RK=k0HCcQgeOg; pgv_pvi=4384783360; tvfe_boss_uuid=e72e765a79d2f90f; 。。。*",}req = request.Request(url,headers = header)print(request.urlopen(req).read().decode('utf-8'))
  • 获取 Ajax 加载的 json 数据:

    #!/usr/bin/python#-*- coding:utf-8 -*-​from urllib import request,parseimport json​url  = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action"​header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}​formData = {    "start":"0",    "limit":"5"}​data = parse.urlencode(formData).encode('UTF-8')​​req = request.Request(url,data = data,headers = header)​print(request.urlopen(req).read().decode('UTF-8'))

     

转载于:https://my.oschina.net/dwqdwd/blog/1787747

你可能感兴趣的文章
Java设计模式之五大创建型模式(附实例和详解)
查看>>
60 Permutation Sequence
查看>>
主流的RPC框架有哪些
查看>>
Hive学习之路 (七)Hive的DDL操作
查看>>
[转]mysql使用关键字作为列名的处理方式
查看>>
awesome go library 库,推荐使用的golang库
查看>>
树形展示形式的论坛
查看>>
jdbcTemplate 调用存储过程。 入参 array 返回 cursor
查看>>
C++中的stack类、QT中的QStack类
查看>>
Linux常用基本命令[cp]
查看>>
CSS 相对|绝对(relative/absolute)定位系列(一)
查看>>
关于 Nginx 配置 WebSocket 400 问题
查看>>
Glide和Govendor安装和使用
查看>>
Java全角、半角字符的关系以及转换
查看>>
Dubbo和Zookeeper
查看>>
前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
查看>>
UOJ#179. 线性规划(线性规划)
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
查看>>
Isolation Forest原理总结
查看>>
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>