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