爬虫简介

    技术2022-07-11  89

    爬虫的基本流程

    发送请求。通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。获取响应内容。如果服务器能正常响应,会得到一个Response,Response的内容便士所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。解析内容。得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。保存数据。保存形式多样,可以存为文本,可以保存至数据库,或者保存特定格式的文件。

    Request和Response

    浏览器发送消息给该网址所在的服务器,这个过程叫做HTTP Request。服务器收到浏览器发送的消息后,能根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response浏览器收到服务器的Response信息之后,会对信息进行相应处理,然后展示。

    Request包含什么?

    请求方式。主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。请求URL。URL全程同一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一确定。请求头。包含请求时的头部信息,如User-Agent、Host、Cookies等信息。请求体。请求时额外携带的数据如表单提交时的表单数据。

    Response包含什么?

    响应状态。有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误等。响应头。如内容类型、内容长度、服务器信息、设置Cookie等等。响应体。最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

    实例

    import requests response = requests.get('http://www.baidu.com')

    这里完成了像百度服务器请求的发送,然后获取响应。 然后获取百度的源代码(响应体):

    print(response.text)

    有了响应体就可以对源代码进行解析了。 获取响应头:

    print(response.headers)

    获取状态码:

    print(response.status_code)

    状态码为200说明正常访问了百度。 刚刚没有传入headers,现在传入headers试试: 打开网页的源码:

    复制这里的User-Agent,比如我的是:https://pics6.baidu.com/feed/64380cd7912397dda437d21a589954b1d0a28707.jpeg?token=ad200f77bdeed57adc64b20a21abc215 然后创建一个字典:

    headers = {} # 将User-Agent字段添加进去: headers['User-Agent'] = 'https://pics6.baidu.com/feed/64380cd7912397dda437d21a589954b1d0a28707.jpeg?token=ad200f77bdeed57adc64b20a21abc215'

    然后重新发送请求,将headers作为参数传入:

    response = requests.get('http://www.baidu.com',headers=headers)

    看看相应:

    print(response.status_code)

    成功访问。 下面简单地爬一张图片:

    # 将一张图片的URL复制过来,然后传入get里 response = requests.get('https://pics6.baidu.com/feed/64380cd7912397dda437d21a589954b1d0a28707.jpeg?token=ad200f77bdeed57adc64b20a21abc215') # 输出图片的二进制流,获得响应体的二进制格式 print(response.content)

    这里仅仅输出来的是响应体的二进制格式,可以使用python的写入方法来获取图片:

    # 输入的参数分别为图片的储存路径和模式 with open('d:\\desktop\\td.jpg', 'wb') as f: f.write(response.content) f.close()

    打开桌面的图片就可以看见:

    是万茜。

    爬虫能抓取怎样的数据?

    网页文本 如HTML文档,json格式文本等。图片 获取到的是二进制文件保存为图片格式。视频 同为二进制文件,保存为视频格式即可。其他 只要能请求成功的就能爬取。如文档等。

    如何解析网页?

    直接处理。当网页抓取的是字符串,去除一些空格就可以。要求网站本身的结构比较简单,返回的内容也比较简单。json解析。返回的是json字符串。正则表达式beautifulSoup(解析库)pyQuery(解析库)xpath(解析库)
    Processed: 0.033, SQL: 10