爬虫的基本概念
关于爬虫的基本概念, 推荐博客https://xlzd.me/ 里面关于爬虫的介绍非常通俗易懂.
简单地说,在我们输入网址后到可以浏览网页,中间浏览器做了很多工作, 这里面涉及到两个概念:
- IP地址: IP地址是你在网络上的地址,大部分情况下它的表示是一串类似于192.168.1.1的数字串。访问网址的时候,事实上就是向这个IP地址请求了一堆数据。
- DNS服务器: 而DNS服务器则是记录IP到域名映射关系的服务器,爬虫在很大层次上不关系这一步的过程。一般浏览器并不会直接向DNS服务器查询的IP,这个过程要复杂的多,包括向浏览器自己、hosts文件等很多地方先查找一次,上面的说法只是一个统称。
浏览器得到IP地址之后,浏览器就会向这个地址发送一个HTTP请求。然后从网站的服务器端请求到了首页的HTML源码,然后通过浏览器引擎解析源码,再次向服务器发请求得到里面引用过的Javascript、CSS、图片等资源,得到了网页浏览时的样子。
搭建实验环境
import requests # 网页下载工具
from bs4 import BeautifulSoup # 分析网页数据的工具
import re # 正则表达式,用于数据清洗\整理等工作
import os # 系统模块,用于创建结果文件保存等
import codecs # 用于创建结果文件并写入
2 爬虫的实现
编写爬虫之前,我们需要先思考爬虫需要干什么、目标网站有什么特点,以及根据目标网站的数据量和数据特点选择合适的架构。
推荐使用Chrome的开发者工具来观察网页结构。对应的快捷键是"F12"。
右键选择检查(inspect)即可查看选中条目的HTML结构。
一般,浏览器在向服务器发送请求的时候,会有一个请求头——User-Agent,它用来标识浏览器的类型.
如果是python代码直接爬,发送默认的User-Agent是python-requests/[版本号数字]
这时可能会请求失败,因为服务器会设置通过校验请求的U-A来识别爬虫,通过模拟浏览器的U-A,能够很轻松地绕过这个问题。
设置Use-Agent请求头, 在代码'User-Agent':
后就是虚拟的浏览器请求头.
def fetch_html(url_link):
html = requests.get(url_link,
headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'}).content
return html
DOWNLOAD_URL = 'http://usefulenglish.ru/phrases/'
html = fetch_html(DOWNLOAD_URL)
上面这段代码可以将url_link中网址的页面信息全部下载到变量html中.
之后调用Beautifulsoup解析html中的数据.</