一、网络爬虫简单介绍
1.网络爬虫基本结构
2.网络爬虫的工作流程
2.1.发起请求
通过 HTTP 库向目标站点发起请求,即发送一个 Request,请求可以包含额外的 Headers 等信息,等待服务器响应。
2.2.获取响应内容
如果服务器能正常响应,会得到一个 Response,Response 的内容便是所要获取的页面内容,类型可能有 HTML,JSON 字符串,二进制数据(如图片视频)等类型。
2.3.解析内容
得到的内容可能是 HTML,可以用正则表达式、网页解析库进行解析。可能是 JSON,可以直接转为 JSON 对象解析,可能是二进制数据,可以做保存或者进一步的处理。
2.4.保存数据
保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
3.从爬虫的角度看待互联网网页的分类分别有几种?区分的标准是什么?
从爬虫的角度看,可分为已下载,待下载,可知网页和不可知网页。其中已下载网页中包括已经发生变化的动态网页(我们将其视为已过期,其余网页为未过期)。而保存在待爬取 url 队列中的是待下载网页。可知网页可以从待下载网页或待下载 url 分析得到,进行爬取。而不可知网页无法通过简单的分析获取,如腾讯新闻的评论等不显示源码的部分。
二、拿 Python 写的爬虫 demo
import 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 文件,如果存在,搜索爬虫会根据其中定义的爬取范围来爬取。如果没有找到这个文件,那么搜索爬虫便会访问所有可直接访问的页面。