python爬虫之urllib的使用

构建爬虫程序主要步骤


1.明确爬去目标,url地址
2.构建http请求,发起请求
3。处理响应结果(响应头,响应体)
    a.如果是数据则存储(mysql)
        年龄 性别 体重

    b.如果页面理由其它需要提取的url,则执行步骤1

我们拿京东的首页最为实验

#代码如下

#首先我们先导入 模块 urllib

from urllib import request

#然后我们定义要爬去的地址

base_url = 'https://www.jd.com/'

#发起请求

response = request.urlopen(base_url)

#读取页面的内荣

html = response.read().decode('utf-8)


#在这里说下read()是读的意思,decode('utf-8)默认转成utf8的字符串,根据自己的编码情况定义

然后我们打印下页面然后和京东首页的源代码进行比较

print(html)

让你们看下京东首页的头部我就复制一下

<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!</title>
  <meta name="description" content="京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!" />
  <meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东" />
  <script type="text/javascript">

#结果

<head>
  <meta charset="UTF-8">
  <title>京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!</title>
  <meta name="description" content="京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!" />
  <meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东" />
  <script type="text/javascript">

这就把你所需要的东西爬去下来了

#这是最基础的爬虫

如果报错

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 251: invalid start byte

这中错误一般是编码错误

需要把html = response.read().decode('utf-8)

decode('utf-8')中的utf-8改成 gbk

代码如下

html = response.read().decode('gbk')

#接下里我们在介绍一下最基本的反爬虫

我这里直接上代码了,你们看报的错误

拿西刺代理作为实验

from urllib import request
base_url = 'http://www.xicidaili.com/'
response = request.urlopen(base_url)
html = response.read().decode('utf-8')

print(html)

我们在打印html直接报错了

错误信息如下

urllib.error.HTTPError: HTTP Error 503: Service Temporarily Unavailable

urllib.error.httperror:HTTP错误503服务暂时不可用。

这说明此网站中有反爬虫的

所以我们要破解他

我们下打开他的网页用F12打开查看请求头

首先我们先从请求头开始

Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: BIDUPSID=80FBE2657AB3B9D9D9BE82688C7448DD; PSTM=1525085360; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=1F8D98BADDD96B65D875F8C1316850AE:FG=1; HMACCOUNT=4E45A861BC51C356; H_PS_PSSID=; PSINO=1; locale=zh; HMVT=6bcd52f51e9b3dce32bec4a3997715ac|1525701609|
Host: hm.baidu.com
If-None-Match: 5c3b05459187e67c077312cdbbe0a08c
Referer: http://www.xicidaili.com/
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36

accept()是在一个套接口接受的一个连接。accept()是c语言中网络编程的重要的函数,本函数从s的等待连接队列中抽取第一个连接,创建一个与s同类的新的套接口并返回句柄。

Accept-Encoding告诉Web服务器接收gzip压缩输出

Accept-Language 是HTTP 请求里面的一个属性,用于告诉服务器浏览器可以支持什么语言。 如果网站支持多语种的话,可以使用这个信息来决定返回什么语言的网页 。
Cookie就是服务器暂存放在你电脑上的一笔资料,好让服务器用来识别你的计算机。当你在浏览网站的时候,WEB服务器会先送一小小资料放在你的计算机上,Cookie会帮你在网站上所打的文字或是一些选择,都记录下来。当下次你再光临同一个网站,WEB服务器会先看看有没有它上次留下的Cookie资料,如果有的话,就会根据Cookie里的内容来判断使用者,送出特定的网页内容给你。Cookie的使用很普遍,许多有提供个人化服务的网站,都是利用Cookie来识别使用者,以方便送出使用者量身定做的内容,像是Web接口的免费Email网站,都要用到Cookie。 
Hosts是一个没有扩展名的系统文件,,记录了一些网站的IP地址和域名的对应关系.可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,如果在hosts文件中存在这个对应关系的时候,域名解析优先生效,域名解析不再请求域名服务器,系统会立即打开对应网页;否则,系统将网址提交DNS域名解析服务器进行IP地址的解析。


当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件

那我们构建headers 请求

#代码如下

from urllib import request

#爬取的网址
base_url = 'http://www.xicidaili.com/'
#请求头
 headers = {
    "Cookie": "BIDUPSID=80FBE2657AB3B9D9D9BE82688C7448DD; PSTM=1525085360; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=1F8D98BADDD96B65D875F8C1316850AE:FG=1; HMACCOUNT=4E45A861BC51C356; H_PS_PSSID=; PSINO=1; locale=zh; HMVT=6bcd52f51e9b3dce32bec4a3997715ac|1525701609|",


    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
}
req = request.Request(base_url,headers=headers)
response = request.urlopen(req)
html = response.read().decode('utf-8')

print(response.status)

#响应码为

200

猜你喜欢

转载自blog.csdn.net/yang_bingo/article/details/80231654