采用requests库构建简单的网络爬虫

Date: 2019-06-09

Author: Sun

我们分析格言网 https://www.geyanw.com/, 通过requests网络库和bs4解析库进行爬取此网站内容。

项目操作步骤
  1. 创建项目文件夹

    --geyanwang
       ---spiders  # 保存我们爬虫代码
          ---- geyan.py # 爬虫的代码
       ---doc   # 操作步骤说明文档
  2. 创建虚拟环境

    cd   geyanwang/
    virtualenv spider  --python=python3  # 创建venv虚拟环境
  3. 安装依赖库

    $ source venv/bin/activate
    (spider) $ pip install requests
    (spider) $ pip install lxml
    (spider) $ pip install bs4
  4. 编写代码 spiders/geyan.py

# -*- coding: utf-8 -*-  
__author__ = 'sun'
__date__ = '2019/6/19 下午2:22' 

from bs4 import BeautifulSoup as BSP4

import requests

g_set = set()

def store_file(file_name, r):
    html_doc = r.text
    with open("geyan_%s.html"%file_name, "w") as f:
        f.write(html_doc)

def download(url, filename='index'):
    '''
    :param url: 待下载页面地址
    :return: 页面内容
    '''
    r = requests.get(url)   #发送url请求,得到url网页内容

    store_file(filename, r)
    return r


def parse_tbox(tbox, base_domain):
    '''
    解析某个小说类别
    :param tbox:
    :param base_domain:
    :return:
    '''
    tbox_tag = tbox.select("dt a")[0].text
    print(tbox_tag)

    index = 0
    li_list = tbox.find_all("li")
    for li in li_list:
        link = base_domain + li.a['href']
        print("index:%s, link:%s" % (index, link))
        index += 1
        if link not in g_set:
            g_set.add(link)
            filename = "%s_%s" % (tbox_tag, index)
            sub_html = download(link, filename)


def parse(response):
    '''
    对页面进行解析
    :param response: 页面的返回内容
    :return:
    '''
    base_domin = response.url[:-1]
    g_set.add(base_domin)
    #print(base_domin)
    html_doc = response.content
    soup = BSP4(html_doc, "lxml")
    tbox_list = soup.select("#p_left   dl.tbox")  #小说
    [parse_tbox(tbox, base_domin)  for tbox in tbox_list]



def main():
    base_url = "https://www.geyanw.com/"
    response = download(base_url)
    parse(response)


if __name__ == "__main__":
    main()
  1. 运行上述代码,会产生一堆的html文件至本地

作业

上述geyan.py文件中只处理了首页

如何按照类别分页爬取相关内容,采用多线程实现

eg:

https://www.geyanw.com/lizhimingyan/

https://www.geyanw.com/renshenggeyan/

将爬取的网页以文件夹命名不同的方式进行保存至本地

转载于:https://www.cnblogs.com/sunBinary/p/11055662.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值