一、爬虫的工作原理
1.确认你抓取的目标的url是哪一个
2.使用python代码发送请求获取数据
3.解析获取到的数据(精确数据)
①找到新的目标(url)②回到第一步(自动化)
4.数据持久化
二、注意问题
1.urllib.request ——url的request模块可以非常方便的抓取url内容,即发送一个get请求到指定的页面,然后返回HTTP的响应。
2.python爬取的数据类型可能是字符串str、二进制bytes…
①如果爬取回来的数据是bytes类型,但如果写入的时候需要字符串类型 ,则需要对其进行解码:decode(“utf-8”)
②如果爬取回来的数据是str类型,但如果写入的时候需要bytes类型,则需要对其进行编码: encode(“utf-8”)
3.urllib.parse、string——该两个库是用于拼接url时汉字部分转译
使用代码发送网络请求,如果网址内包含了汉字(例如http:\www.baidu.com+搜索关键字),使用代码发送网络请求,会出现如下错误:
# UnicodeEncodeError: ‘ascii’ codec can’t encode characters
# in position 10-11: ordinal not in range(128)
因为Python是解释性语言,解析器只支持 ASCII 0-127,ASCII是没有汉字的,不支持中文,故需要将包含汉字的网址进行转译。
使用“urllib.parse.quote(final_url,safe=“string.printable”)”
4.字典传参用到“urllib.request.urlencode”,将字典转换为字符串类型;同时字典中的冒号‘:’自动转换为“=”
5.使用Post请求时,代码有如下不同:
urllib.request.openurl(url,data=服务器接收的数据)
二、代码1
import urllib.request #url的request模块可以非常方便的抓取url内容,即发送一个get请求到指定的页面,然后返回HTTP的响应
def load_data():
url = 'http://www.baidu.com/'
#get的请求
#http的请求
# response:http响应的对象
response = urllib.request.urlopen(url)
print(response)#返回: '<http.client.HTTPResponse object at 0x0000000003976CC0>'
# 读取内容 【bytes类型】
data = response.read()
print(data)#返回了HTML的代码如下,第一个字母b代表是二进制;有的网站返回的可能是txt、二进制、字符串。
#b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(l