首页 > 技术文章 > Python通过urllib批量爬取网页链接

btc1996 2021-02-25 14:39 原文

为了通过爬虫快速获取网站中的信息,我们通常将第一次爬取的网页中的url形成一个待爬取的列表

为了访问网站以及对网站源代码进行分析,这里使用urllib的request库获取网页源代码,使用lxml库对网页进行结构分析。

首先引用需要的库

import urllib.request
import lxml.etree

接下来我们从中获取网页中的url链接以及其文本标题,保存到文件夹中,这里采用文本文件的形式进行保存


def htmlanalyze(url1):
    text = requests.get(url1).text
    doc = lxml.etree.HTML(text)
    root = doc.xpath("/nodename")
    print(root)
    f=open("./data/"+'allessi.txt','a')
    print(len(text))
    for line in text:
        line_name = line.xpath("./a/text()")[0].strip()
        line_url = line.xpath("./a/@href")[0]
        f.write(line_name+'$$'+line_url+'\n')

 从一个网页中获取url列表之后,我们将其进行去重,排序处理,之后就可以循环对列表中的url进行访问了

在爬取的过程中由于高频率的多次访问同一个网站,而正常浏览网页不会出现那么频繁的访问行为,对于有反爬虫或其他保护机制的网站会对异常访问的IP采取访问限制,这里有几种应对措施。

1.对于高频访问导致的访问限制,可以通过主动降低访问频率来避免被服务端限流,可在程序中加入sleep函数增加网站访问的时间间隔。

 这里使用python自带的time库

import time

在循环访问网页的位置添加以下代码即可,括号中的delay为希望程序的延迟时间,单位为秒

time.sleep(delay)

2.通过代理使用不同的ip地址对网站进行访问。

不同的IP可以在网上找到一些可以使用的免费ip资源,注意大多数ip不是永久有效的。

需要定时更新ip列表。

推荐阅读