爬虫入门

入门案例

通过入门案例快速入门
import requests
url = 'http://www.cntour.cn/'
strhtml = requests.get(url)
print(strhtml.text)


# --------------------------------------------------------------------

import requests
import json


def get_translate_data(word=None):
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    from_data = {
        'i': word,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': '15901113472280',
        'sign': '60347cb39956684398343a7720b9b80e',
        'ts': '1590111347228',
        'bv': 'd17d9dd026a611df0315b4863363408c',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME'
    }
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
    }
    # ip池
    proxies = {
        'http': 'http:10//10.10.1.10:3128',
        'https': 'http:10.10.1.10:1080',
    }
    # 请求表单数据
    response = requests.post(url, data=from_data, headers=headers, proxies=proxies)
    # 将json格式字符串转换为字典
    content = json.loads(response.text)
    print(content)
    # 打印翻译后的数据
    print(content['translateResult'][0][0]['tgt'])

if __name__=='__main__':
    get_translate_data('你好')

-# ----------------------------------------------------------------
import requests
# 调用BeautifulSoup
from bs4 import BeautifulSoup
import re

url = 'http://www.cntour.cn'
# 发送请求
str_html = requests.get(url)
# str_html.text为html Unicode文本,使用lxml解析器来解析
soup = BeautifulSoup(str_html.text, 'lxml')
data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.leftBox > div:nth-child(3) > ul > li > a')
print(data)

for item in data:
    result = {
        'title': item.get_text(),
        'link': item.get('href'),
        'id': re.findall('\d+', item.get('href'))
    }
    print(result)import requests

url = 'http://www.cntour.cn/'
strhtml = requests.get(url)
print(strhtml.text)

# --------------------------------------------------------------------

import requests
import json


def get_translate_data(word=None):
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    from_data = {
        'i': word,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': '15901113472280',
        'sign': '60347cb39956684398343a7720b9b80e',
        'ts': '1590111347228',
        'bv': 'd17d9dd026a611df0315b4863363408c',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME'
    }
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
    }
    # ip池
    proxies = {
        'http': 'http:10//10.10.1.10:3128',
        'https': 'http:10.10.1.10:1080',
    }
    # 请求表单数据
    response = requests.post(url, data=from_data, headers=headers, proxies=proxies)
    # 将json格式字符串转换为字典
    content = json.loads(response.text)
    print(content)
    # 打印翻译后的数据
    print(content['translateResult'][0][0]['tgt'])

if __name__=='__main__':
    get_translate_data('你好')

# --------------------------------------------------------------------
import requests
# 调用BeautifulSoup
from bs4 import BeautifulSoup
import re

url = 'http://www.cntour.cn'
# 发送请求
str_html = requests.get(url)
# str_html.text为html Unicode文本,使用lxml解析器来解析
soup = BeautifulSoup(str_html.text, 'lxml')
data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.leftBox > div:nth-child(3) > ul > li > a')
print(data)

for item in data:
    result = {
        'title': item.get_text(),
        'link': item.get('href'),
        'id': re.findall('\d+', item.get('href'))
    }
    print(result)

URI和URL

URI既是统一资源标志符,URL是统一资源定位符,URL是URI的子集。URI还有一个子集叫做URN,既统一资源名称。下图为URI,URL,URN的关系。
在这里插入图片描述

HTTP和HTTPS

HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效准确地传输超文本文档。HTTPS是HTTP的安全版,即HTTP下加入了SSL层,简称HTTPS。

谷歌浏览器开发者模式

  • network下各属性的含义

以下显示的是每一个请求。

在这里插入图片描述

  1. 第一列 Name:请求的名称,一般会将 URL 的最后一部分内容当作名称。
  2. 第二列 Status:响应的状态码,这里显示为 200,代表响应是正常的。 通过状态码,我们可
    以判断发送了请求之后是杏得到了正常的响应。
  3. 第三列 Type: 请求的文梢类型。 这里为document,代表我们这次请求的是一个HTML文档, 内容就是一些 HTML代码。
  4. 第四列 Initiator: 请求源。用来标记请求是由哪个对象或进程发起的。
  5. 第五列 Size: 从服务器下载的文件和请求的资源大小。 如果是从缓存中取得的资源,则该列会显示from cache。
  6. 第六列 Time: 发起请求到获取响应所用的总时间。
  7. 第七列Waterfall:网络请求的可视化瀑布流。

点开请求查看详细的信息。
在这里插入图片描述

首先是 General 部分:

  • Request URL 为请求的 URL
  • Request Method 为请求的方法
  • Status Code 为响应状态码
  • Remote Address 为远程服务器的地址和端口
  • Referrer Policy 为 Referrer判别策略

Response Headers 和 Request Headers,这分别代表响应头和请求头。

Request Headers

  1. Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
  2. Accept-Language:指定客户端可接受的语言类型。
  3. Accept-Encoding :指定客户端可接受的内容编码。
  4. Host:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位 置。 从 HTTP 1. l
    版本开始,请求必须包含此内容。
  5. Cookie :也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地 的数据。
    它的主要功能是维持当前访问会话。 例如,我们输入用户名和密码成功登录某个网
    站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时, 会发现都是登录状态,这就是 Cookies 的功劳。
    Cookies 里有信息标识了我们所对应的服务器 的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookies
    并将其发送给服 务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结
    果就是登录之后才能看到的网页内容。
  6. Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相 应的处理,如做来源统计、防盗链处理等。
  7. User-Agent:简称 UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统 及版本、 浏览器及版本等信息。
    在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很 可能会被识别州为爬虫。
  8. Content-Type:也叫互联网媒体类型( Internet Media Type )或者 MIME 类型,在 HTTP 协议
    消息头中,它用来表示具体请求中的媒体类型信息。 例如, text/html 代表 HTML 格式, image/gif代表 GIF
    图片, application/json 代表 JSON类型,更多对应关系可以查看此对照表:
    http://tool.oschina.neνcommons。

Response Headers

  • Date: 标识响应产生的时间。
  • Last-Modified : 指定资源的最后修改时间。
  • Content-Encoding : 指定响应内容的编码。
  • Server: 包含服务器的信息 ,比如名称、版本号等。
  • Content-Type: 文档类型,指定返回的数据类型是什么 ,如 text/html 代表返回 HTML 文档,
    application/x-javascript !J!U代表返回 JavaScript 文件, image/jpg 则代表返回图片。
  • Set-Cookie : 设置 Cookies。 响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中 ,
    下次请求携带 Cookies 请求。
  • Expires: 指定响应的过期时间 , 可以使代理服务器或浏览器将加载的内容更新到缓存巾。 如 果再次访问时,就可以直接从缓存中加载,
    降低服务器负载,缩短加载时间。

爬虫概述

  • 获取页面

使用requests,urllib等python库,实现HTTP请求的操作,得到响应之后,只需要解析数据结构中的Body部分即可,即得到网页的源代码。HTTP请求库只能获取HTML的信息,对于JavaScript渲染页面的网页要使用Selenium, Splash这样的库来实现模拟JavaScript渲染。

  • 提取信息

使用Beautiful Soup, pyquery, lxml等python库,这些库可以更具网页节点属性,CSS选择器或者XPath来提取网页信息。

  • 保存数据

把提取到的信息保存在类如TXT文本或JSON数据当中,也可以保存在MySQL和MongoDB数据库当中。

  • 自动化程序

代替人工的自动化程序,在抓取过程中进行各种异常吹,错误重试等操作,保证爬取持续高效地运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值