[网络爬虫]入门篇-对爬虫的了解

1.利用python-whis库可以查看网站的所有者

import whois
print(whois.whois("url"))
2.利用builtwith库可以识别网站所用的技术
import builtwith
print(built.parse("url"))

3.利用robots.txt 可以让爬虫了解爬取该网站时存在哪些限制

www.baidu.com/robots.txt

4.无论使用哪种用户代理,都应该在两次下载请求之间给出5秒的抓取延迟,我们需要遵从该建议以避免服务器过载

1.1编写第一个网络爬虫

  为了抓取网站,我们首先需要下载包含有感兴趣数据的网页,该过程一般被称为爬取(crawling)。爬取一个网站有很多种方法,而选用哪种方法更加
合适,则取决于目标网站的结构
    三种常见的爬取网站方法
  • 爬取网站地图
  • 遍历每个网页的数据库ID
  • 跟踪网页链接

   下载网页

想要爬取网站先下载网页,利用requests模块下载URL

import requests
res = requests.get("https://www.baidu.com")
print(res.text)

增强上述代码的健壮性

import requests

def downLoad(url, num=2):
    print("Downloading: " + str(url))  # 输出要下载的网页 URL
    try:
        headers = {
        res = requests.get(url)
        res.raise_for_status()  # 检查是否发生请求异常 400-500
    except requests.exceptions.RequestException as e:
        print("失败")
        res = None
        if num > 0:
            if isinstance(e, requests.exceptions.HTTPError) and 500 <= e.response.status_code < 600:#e.response.status_code获取错误状态码
                return downLoad(url, num - 1)
    return res.text


url = "https://www.baidu.com"
downLoad(url)

设置用户代理

如果能使用可辨识的用户代理则会更好,这样可以避免我们的网络爬虫碰到一些问题。此外,也许是因为曾经历过质量不佳的Pyon网络爬虫造成的服务器过载,一些网站还会封禁这个默认的用户代理,为了下载更加可靠,我们需要控制用户代理的设定

import requests

def downLoad(url, num=2):
    print("Downloading: " + str(url))  # 输出要下载的网页 URL
    try:
        headers = {
            'User-Agent': 'user_agent'}
        res = requests.get(url, headers=headers)
        res.raise_for_status()  # 检查是否发生请求异常 400-500
    except requests.exceptions.RequestException as e:
        print("失败")
        res = None
        if num > 0:
            if isinstance(e, requests.exceptions.HTTPError) and 500 <= e.response.status_code < 600:#e.response.status_code获取错误状态码
                return downLoad(url, num - 1)
    return res.text


url = "https://www.baidu.com"
downLoad(url)

网站地图爬取

在第一个简单的爬虫中,我们将使用示例网站robots.txt文件中发现
的网站地图来下载所有网页。为了解析网站地图,我们将会使用一个简单的正则表达式,从<="(.*?)">标签中提取出URL。
def crawl_sitemap(url):
    sitemap = requests.get(url)
    print(sitemap.text)
    links = re.findall('="(.*?)"',sitemap.text)
    for link in links:
        print(link)

url = " http://www.sitemaps.org/protocol.html"
crawl_sitemap(url)

猜你喜欢

转载自blog.csdn.net/weixin_73865721/article/details/131799582