1.网站地图爬虫
def crawl_sitemap(url):
#下载网站地图文件
sitemap=download(url)
#正则表达式,从<loc>标签中提取出URL,获得网站地图链接
links=re.findall('<loc>(.*?)</loc>',sitemap)
#下载每个链接
for link in links:
html=download(link)
#抓取的网站
2.ID遍历爬虫
(1)对ID进行遍历,直到出现下载错误时停止。
缺陷:某些记录可能已被删除,数据库ID之间并不是连续的。此时,只要访问到某个间隔点,爬虫就会立刻退出。
import itertools
for page in itertools.count(1):
url='http://example.webscrapping.com/view/-%d' %page
html=download(url)
if html is None:
break
else:
pass
(2)该版本中途连续发生多次下载错误后才会退出程序。
import itertools
#允许最大连续数量的下载的错误
max_errors=5
#目前连续下载错误的数量
num_errors=0
for page in itertools.count(1):
url='http://example.webscrapping.com/view/-%d' %page
html=download(url)
if html is None:
#在这个网页上尝试下载收到的错误信息
num_errors+=1
if num_errors==max_errors:
break
else:
#能够成功爬取结果
num_errors=0
3.链接爬虫
使用正则表达式来确定需要下载哪些页面。
(1)使用正则表达式确定需要下载的页面。但是该链接只有网页的路径部分,没有协议和服务器部分,也就是这是一个相对链接,浏览器知道你在浏览哪个网页, 所以在浏览器浏览时, 相对链接是能够正常工作的。但 是,urllib2是无法获知上下文的。
import re
def link_crawl(seed_url,link_regex):
crawl_queue=[seed_url]
while crawl_queue:
url=crawl_queue.pop()
html=download(url)
#匹配正则表达式
for link in get_links(html):
if re.match(link_regex,link):
crawl_queue.append(link)
def get_links(html):
webpage_regex=re.compile('<a[^>]+href=["\'](.*?)["\']',re.IGNORECASE)
return webpage_regex.findall(html)
(2)存储已发现URL的功能,避免重复爬取相同的链接
import re
import urlparse
def link_crawler(seed_url,link_regex):
crawl_queue=[seed_url]
#保持跟踪哪个URL链接在之前被跟踪过
seen=set(crawl_queue)
while crawl_queue:
url=crawl_queue.pop()
html=download(url)
#匹配正则表达式
for link in get_links(html):
if re.match(link_regex,link):
#绝对路径
link=urlparse.urljoin(seed_url,link)
#检查是否曾经看过这个链接
if link not in seen:
seen.add(link)
crawl_queue.append(link)
本文深入探讨了三种主要的网络爬虫技术:网站地图爬虫、ID遍历爬虫和链接爬虫。介绍了每种爬虫的工作原理,包括如何下载网站地图、遍历数据库ID以及通过正则表达式抓取链接。此外,还讨论了爬虫在实际应用中可能遇到的问题及解决方案。
263

被折叠的 条评论
为什么被折叠?



