《python 网络爬虫技术》参考答案 第1章~第7章 |
您所在的位置:网站首页 › python第一章答案 › 《python 网络爬虫技术》参考答案 第1章~第7章 |
第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 |