《python 网络爬虫技术》参考答案 第1章~第7章

您所在的位置:网站首页 python第一章答案 《python 网络爬虫技术》参考答案 第1章~第7章

《python 网络爬虫技术》参考答案 第1章~第7章

2024-07-12 02:29| 来源: 网络整理| 查看: 265

第1章  网络爬虫入门

1.选择题

(1)B (2)A (3)D

2.简答题

(1)预先设定一个或若干个初始网页URL,将初始URL加入到待爬取URL列表中;从待爬取列表中逐个读取URL,并将URL加入到已爬取URL列表中,然后下载网页;解析已下载的网页,并存储提取的数据,从中获取新的URL;将新的URL在已爬取的URL列表中进行比对,检查该网页是否已爬取,如果网页没有被爬取,则将新的URL地址放入到待爬取URL列表的末尾,等待读取;如此往复,直到待爬取URL列表为空或者满足设定的终止条件,最终达到遍历网页的目的。

(2)门户网站、搜索引擎和大型网络服务提供商是网络爬虫的主要应用场景;有些企业也会时常借助网络爬虫采集和分析数据;当然,普通用户也可以利用网络爬虫采集自己关注的数据。

3.实践题

print('*'*26)

print('我用Python编写网络爬虫。')

print('*'*26)

第2章  爬虫基础

1.选择题

(1)A (3)A (4)D (5)C (6)C

2.填空题

(1)request、error、parse和robotparser

(2)请求的网址、请求方法、请求头和请求体

(3)响应状态码、响应头和响应体

3.实践题

import requests #导入requests模块

import time #导入time模块

headersvalue = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',

'Cookie':'__jdu=1673555654;shshshfpa=565be4ca-07c2-cd67-78e4-92691c5c0e78-1590370825;shshshfpb=rVrKSmn2IcLo8w4GOV3s%2FvQ%3D%3D;unpl=V2_ZzNtbRAEREJxAUNcfEkLV2JQEl0RUkUUJQgTVnMdDgQzU0ZfclRCFnQUR1JnGFwUZwAZWEJcRhRFCEdkeBBVAWMDE1VGZxBFLV0CFSNGF1wjU00zQwBBQHcJFF0uSgwDYgcaDhFTQEJ2XBVQL0oMDDdRFAhyZ0AVRQhHZHseWgdjBxZaRlJzJXI4dmR5GFUDYTMTbUNnAUEpAE9ceR5VSGcEFF9GU0cScQ12VUsa;__jdv=76161171|baidu-pinzhuan|t_288551095_baidupinzhuan|cpc|0f3d30c8dba7459bb52f2eb5eba8ac7d_0_cb6f58496afc4b11b470a1d395c0eae3|1593578499694;areaId=1;ipLoc-djd=1-2800-0-0;PCSYCityID=CN_110000_110100_110108;user-key=a7ecfb5e-4ce5-45f3-bc50-f34f38529f35; __jda=122270672.1673555654.1590370824.1593575769.1593578500.5; __jdc=122270672;shshshfp=a361ce6062d6acb4a213e3fccb63cea4;cart-main=xx;cd=0;wlfstk_smdl=o0y1hhq7lhtt3bmuyyrsq4frzsm2x25l;TrackID=1bBtBpjzT4KptbszIfvAs3fgoavSXZLPO-rjd9P-eg3J0f2YgpvBSjdIiKW0synUQAkjr8iSOKnvciMPU3XkYwhLdym1pPC6JJlsY52WVqIk;thor=53783C64FD0A997288CB6CC2D828217654920A82353860FFBC08C3E814CD72E23EC5E6849607FB867D56BB6BB176E21719C7A0E6ED254BD9BEFAE84419AE8A5164F65661B13E6E9FE5D6D9A1543D1E5ED2933AA8FF5FBE38555C48D1EE365B4B2437708D39597BAF689B54B61F3E88115CFAB7D39814771A44D458655F67F6DE109AD4D41497D61F1BA892BB9B996453;pinId=fGixLn-KPTpnavPdRtFWag;pin=linglanwangyi; unick=%E5%87%8C-%E8%93%9D; ceshi3.com=000;_tp=12hoQaUhHWSC8herrlonvg%3D%3D;_pst=linglanwangyi;cn=4;3AB9D23F7A4B3C9B=PTX54LWTNEJQ2FVWJLZFXG7JIEW2QC7F7FN2Q4EQD2RWZ4HKYWOJ6WA3MFHDAPSX2SHQLN27F57I5BPG4U3L6YGVAY;shshshsID=8230af78e8b1a5f089e9e71304a10a50_7_1593578796165; __jdb=122270672.12.1673555654|5.1593578500'

} #设置请求头User-Agent和Cookie参数

url = 'https://cart.jd.com/cart.action' #定义url字符串

for i in range(1,100): #循环

    #异常处理

    try:

#发送请求,并将返回结果赋值给r

        r = requests.get(url, headers=headersvalue, timeout=1)  

    except requests.Timeout:   #捕获Timeout异常

        print('Timeout!')   #输出“Timeout!”

    else:

        print(r.status_code) #输出返回状态码

        print(r.text) #输出返回状态码

    time.sleep(1) #设置1s休眠时间

第3章  网页解析基础

1.选择题

(1)A (2)D (3)C (4)C (5)B (6)A (7)B (8)A

2.填空题

(1)//ul/*[@class=’listmain’]

(2)a[bcd]e

(3)loads()和dumps()

3.实践题

(1)

import chardet #导入chardet模块

import requests #导入requests模块

import urllib.parse #导入parse模块

from lxml import etree #导入etree模块

#定义字符串novel_base_url

novel_base_url = 'http://www.biqukan.com'

#将合并的url赋值给novel_url

novel_url = urllib.parse.urljoin(novel_base_url, '/50_50096/')

chapter_url_list = [] #定义列表chapter_url_list

headersvalue = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',

} #设置请求头User-Agent信息

#定义函数,获取小说每个章节的链接

def fetch_chapter_urls():

    # 设置headers,发送请求,并将返回结果赋值给r

    r = requests.get(novel_url, headers=headersvalue)

    html = etree.HTML(r.text) #创建HTML对象html

    hrefs= html.xpath('//dd/a/@href')#选择a节点并提取href属性

    for href in hrefs: #遍历

        #判断href是否在chapter_url_list列表中

        if href not in chapter_url_list:

            #将合并的url赋值给chapter_url

            chapter_url=urllib.parse.urljoin(novel_base_url,href)

             #将chapter_url加入chapter_url_list列表中

            chapter_url_list.append(chapter_url)

    chapter_url_list.sort() #对chapter_url_list列表进行排序

#定义函数,获取每个章节的标题和正文

def parse_chapter(url):

    # 设置headers,发送请求,并将返回结果赋值给r

    r = requests.get(url, headers=headersvalue)

    #检测返回内容编码类型

    code_type = chardet.detect(r.content)['encoding']

    #判编码类型是否是GB2312,如果是,改变编码类型为GBK

    if code_type == 'GB2312':

        code_type = 'GBK'

    r.encoding = code_type #重定义返回内容编码类型

    html = etree.HTML(r.text) #创建HTML类对象html

    #选择h1节点并提取文本,将返回的列表第一项赋值给title

    title = html.xpath('//h1/text()')[0]

    #选择id属性值为“content”的节点并提取文本,将返回的列表赋值给contents

    contents = html.xpath('//*[@id="content"]/text()')

    content = '' #定义content字符串

    for i in contents: #遍历

        #移除字符串头尾的空格或换行符,与content相加并赋值给content

        content += i.strip()

    save_novel(title, content) #调用save_novel函数

#定义保存文件函数,将爬取的正文保存到txt文件中

def save_novel(title,content):

    #异常处理

    try:

        #打开文件

        with open(title+'.txt', 'w+', encoding='utf-8') as f:

            f.write(content.strip()) #写入文件

    except urllib.error.HTTPError as e: #捕获HTTPError异常

        print(e.reason) #输出异常原因

    else:

        print('下载完成:'+title) #输出下载完成提示



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3