一、网络爬虫简单介绍

1.网络爬虫基本结构

网页爬虫由 待抓取url 已下载数据 已抓取url 构成 ,其中种子 url 为事先挑选好的 url,其组成了初始的待抓取 url 队列

2.网络爬虫的工作流程

2.1.发起请求

通过 HTTP 库向目标站点发起请求,即发送一个 Request,请求可以包含额外的 Headers 等信息,等待服务器响应。

2.2.获取响应内容

如果服务器能正常响应,会得到一个 Response,Response 的内容便是所要获取的页面内容,类型可能有 HTML,JSON 字符串,二进制数据(如图片视频)等类型。

2.3.解析内容

得到的内容可能是 HTML,可以用正则表达式、网页解析库进行解析。可能是 JSON,可以直接转为 JSON 对象解析,可能是二进制数据,可以做保存或者进一步的处理。

2.4.保存数据

保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。

3.从爬虫的角度看待互联网网页的分类分别有几种?区分的标准是什么?

示例

从爬虫的角度看,可分为已下载,待下载,可知网页和不可知网页。其中已下载网页中包括已经发生变化的动态网页(我们将其视为已过期,其余网页为未过期)。而保存在待爬取 url 队列中的是待下载网页。可知网页可以从待下载网页或待下载 url 分析得到,进行爬取。而不可知网页无法通过简单的分析获取,如腾讯新闻的评论等不显示源码的部分。

二、拿 Python 写的爬虫 demoimport json

import requests
from requests.exceptions import RequestException
import re
from bs4 import BeautifulSoup
def get_one_page(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
soup = BeautifulSoup(html, 'lxml')
items = soup.select('span')
for item in items:
yield item.text
def write_to_file(content):
with open('result.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False) + '\n')
f.close()
def main():
total = '土豆丝'
url = 'https://www.sogou.com/sie?query=' + total
html = get_one_page(url)
parse_one_page(html)
for item in parse_one_page(html):
print(item.text)
write_to_file(item.text)
if __name__ == '__main__':
main()

编译器为 Python3.5.2,使用 requests 库进行网络访问,使用 beautifulsoup 处理爬取到的 html 静态文件,之后使用迭代器进行保存。

三、其他

1.怎样解决 JavaScript 渲染的问题?

分析 ajax 请求,可以获取 JavaScript 调取的图片等信息。

使用 Selenium/WebDriver 模拟浏览器动作,可以进行填写表单等操作。

使用 splash 进行 JavaScript 渲染,抓取信息。

使用 pyv8 调取 v8API 模拟 JavaScript 运行环境。

2.Robots 协议

Robots 协议也被称作爬虫协议、机器人协议,它的全名叫做网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取。它通常是一个叫做 robots.txt 的文本文件,放在网站的根目录下。

当搜索爬虫访问一个站点时,它首先会检查下这个站点根目录下是否存在 robots.txt 文件,如果存在,搜索爬虫会根据其中定义的爬取范围来爬取。如果没有找到这个文件,那么搜索爬虫便会访问所有可直接访问的页面。