前言
目的:根据本人的习惯和理解,用最简洁的表达方式介绍爬行动物的定义、组成部分、攀爬流程,并说明样例代码。
基础知识
爬虫定义:一种定向捕获互联网内容(大部分是网页)并进行自动化数据处理的程序。 主要用于收集松散的大量信息并进行结构化处理,为数据分析和挖掘提供原材料。
今天的TV是巨大的“爬行动物”。
爬行动物由URL库、收集器和解析器组成。
过程
如果要爬网的url库不为空,收集器会自动爬网相关内容并将结果传递给解析器。 在提取目标内容后,解析器将执行写入和检入文件等操作。
代码
第一步:写收集器
以下是比较简单的收集器函数。 需要requests库。
首先,构建包含浏览器和操作系统等信息的http头。 如果没有这个伪造的header,目标网站的WAF等防护设备可能会被识别为机器代码而被杀害。
然后,使用requests库的get方法获取url的内容。 如果http响应代码为200 ok,则页面访问正常,并且函数的返回值将被设置为文本格式的html代码的内容。
如果响应代码不是200 ok,则表示页面无法正常访问,并将函数返回值设置为特殊字符串或代码。
导入请求
defget_page(URL ) :
headers={ ' user-agent ' : ' Mozilla/5.0 (windows nt 6.1 ) appleWebKit/537.36 ) khtml,like Gecko ) chrome/75.0
response=requests.get(URL,headers=headers ) )。
if response.status _ code==200:
return response.text
else:
返回获取html error!'
第二步:解析器
解析器的作用是过滤和过滤收集器返回的html代码,并提取所需的内容。
作为14年的忠实用户,当然会在豆瓣上举出栗子_
我们计划攀登豆瓣排行榜TOP250电影的八个参数。 排名、电影url链接、电影名称、导演、上映年份、国家、电影类型和评分。 合并到词典中写入文本文件。
爬的页面如下,每页包括25部电影,共计10页。
在这里,必须表扬豆瓣的前台工程师们。 html标签的排版分层非常严密,非常方便信息提取。
以下是与“肖刀柄救济”对应的html代码。 ()应提取的8个参数用红线表示) )。
基于上面的html创建解析器函数,并提取8个字段。 函数的返回值是可重复的序列。
我个人喜欢用re (正则表达式)提取内容。 8个().*? )对应于需要提取的每个字段。
导入re
efparse_page(html ) :
pattern=re.compile (' (() ) ).*? ()、)、 *? () )? ()、)、
. *? () )? ) nbsp.*?
() )? () ).*? () ).*? )
. *? () )? (,re.S ) items=re.findall )、pattern和html ) )。
for item in items:
yield {
' rank': item[0],
' href': item[1],
' name': item[2],
' director ' : item [3].strip ([ 4: ],
' year': item[4].strip (),
' country': item[5].strip (),
' style': item[6].strip (),
' score': item[7].strip (
}
提取后的内容如下
整理成完整的代码:(不考虑容错)
导入请求
导入re
import json
defget_page(URL ) :
#收集器函数
headers={ ' user-agent ' : ' Mozilla/5.0 (windows nt 6.1 ) appleWebKit/537.36 ) khtml,like Gecko ) chrome/75.0
response=requests.get(URL,headers=headers ) )。
if response.status _ code==200:
return response.text
else:
返回获取html error!'
efparse_page(html ) :
#解析器函数
pattern=re.compile (' (() ) ).*? ()、)、