网络爬虫:模拟浏览器浏览网页,自动批量下载网络资源。
网络资源:能够访问到的,放在网络服务器的文件。
聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。定向抓取相关网页资源的聚焦爬虫应运而生。
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
import requests
# 1 下载网页首页
url = 'http://www.jingcaiyuedu.com/book/247619.html'
response = request.get(url)
response.encoding = 'utf-8'
# print(response.text)
html = response.text)
# 2 提取章节
title = re.findall(r'.*?<'dl>',html)[1]
chapter_info_list = re.findall(r'(a.*> href+"(.*?)".*?>(>*?),dl)
# 3 循环访问章节,并获取内容
for chapter_info_list in chapter_info_list
chapter_url = chapter_info[0]
chapter_title = chapter_info[1]
if 'http' not in chapter_url
chapter_url = '' & chapter_url
chapter_response = requests.get(chapter_url)
chapter_response.encoding = 'utf-8'
chapter_html = chapter_response.text
# 数据提取和清洗(按页面规律)
# 数据持久化
HTTP Error 403: Forbidden错误
#主要是由于该网站禁止爬虫导致的,可以在请求加上头信息,伪装成浏览器访问User-Agent,具体的信息可以通过火狐的FireBug插件查询
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=chaper_url, headers=headers)
urllib.request.urlopen(req).read()
__author__ = 'wwuhnwu01'
# spider.py
import requests
import re
# 1 下载网页首页
url = 'http://www.xiaoshuotxt.org/wuxia/1617/'
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
# print(html)
# 2 提取章节
title = re.findall(r'(.*?)',menu)
# print(chapter_info_list)
# 3 循环访问章节,并获取内容
for chapter_info in chapter_info_list:
chapter_url = chapter_info[0]
chapter_title = chapter_info[1]
if 'http' not in chapter_url:
chapter_url = 'http://www.xiaoshuotxt.org%s' % chapter_url
chapter_response = requests.get(chapter_url)
chapter_response.encoding = 'utf-8'
chapter_html = chapter_response.text
# 数据持久化(写入txt),先要在前面新建文件fb
fb.write(chapter_title)
fb.write('\n')
fb.write(chapter_html)
fb.write('\n')
#用以下语句可以看到动态过程
print(chapter_url)