Python面试题之爬虫(基础模块)

Penny ·
更新时间:2024-11-15
· 690 次阅读

爬虫 知识点:

整理 爬虫面试题

添加 爬虫的代码

加深 爬虫的理解

版本 python3.6

1. 列举您使用过的Python网络爬虫所用到的网络数据包 requests urllib urllib2

Python自带:urllib、urllib2,第三方:requests

2. 谈谈他们的区别或者优缺点 urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。 urllib2:urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL 的headers),urllib.urlopen只接收一个url。 urllib有urlencode,urllib2没有,因此总是urllib,urllib2常会一起使用的原因。 requests是一个HTTP库, 它只是用来,进行请求,对于HTTP请求,他是一个强大的库,下载,解析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现

目前使用requests和scrapy框架比较多,问到自带库的比较少,一般了解就可以,主要是讲requests

3. requests返回的content和text的区别 response.text返回的是Unicode型数据(获取文本使用); 修改编码方式:response.encoding=”gbk” response.content返回的是bytes类型(获取图片,文件)。 修改编码方式:response.content.decode(“utf8”) 3. 为什么requests请求需要带上header 模拟浏览器,欺骗服务器,获取和浏览器一致的内容 header的形式:字典 用法: requests.get(url,headers=headers) 4. requests使用小技巧 reqeusts.util.dict_from_cookiejar 把cookie对象转化为字典 requests.get(url,cookies={}) 设置请求不用SSL证书验证 response = requests.get("https://www.12306.cn/mormhweb/ ", verify=False) 设置超时 response = requests.get(url,timeout=10) 配合状态码判断是否请求成功 assert response.status_code == 200 4. 使用requests写一个小爬虫 import requests from bs4 import BeautifulSoup # 目标url url = 'http://wx61a0054468aba354.shanhukanshu.com/shuku' headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} #翻页操作 for i in range(1, 10000): url_i = 'http://wx61a0054468aba354.shanhukanshu.com/shuku/{}//0/0/2/2.html'.format(i) response_i = requests.get(url_i, headers=headers).text # 判断最后一页 if response_i is None: break # 获取第i个页面的url、response类、html、soup,以及该页面所有图片对应的src soup_i = BeautifulSoup(response_i, 'lxml') data_list = soup_i.find('div',{'id':'bookList'}) # 二次筛选,获取所有a标签 for i in data_list.find_all('a'): book_url = 'http://wx61a0054468aba354.shanhukanshu.com/' + i['href'] #print(book_url) # 再次请求获取小说内容页 book_content = requests.get(book_url).text # print(book_content) soup = BeautifulSoup(book_content,'lxml') # 小说名称 title = soup.find('h2', {'class':'line_2'}).text #封面 #cover = soup.find('img',src = re.compile(r'^https://bfimg')) src = soup.find_all('img') cover = src[0].get('data-original') # 作者 author = soup.find('span', {'class':'author'}).text # 章节数 chapter_cnt = soup.find('pan', {'class':'nh_wap_fontcolor'}).text # 字数 word_cnt = soup.find('span', {'style':'padding-left: 4px; padding-right: 2px; margin-left: 2px;'}).text # 是否已完成,0连载中,1已完结 is_finished = soup.find('span', {'class':'nh_wap_fontcolor'}).text if is_finished == '完本': is_finished = '1' else: is_finished = '0' # 所属分类,多个用,分开 cate_ids = soup.find('p',{'class':'classify'}).text cate_ids_list = cate_ids.split() cate_ids = cate_ids_list[0:-1] for i in cate_ids: cate_ids = i # 介绍 desc = soup.find('div',{'class':'jianjie'}).text # 添加时间 create_time = '0' # 更新时间 update_time = soup.find('div',{'class':'time nh_wap_fontcolor'}).text # print(cate_ids) #把一本书的数据保存到一个列表中 book_list = [] book_list.append(title) book_list.append(cover) book_list.append(author) book_list.append(chapter_cnt) book_list.append(word_cnt) book_list.append(is_finished) book_list.append(create_time) book_list.append(update_time) book_list.append(cate_ids) print(book_list) #列表转为字符串写入文件中 book_str = ' '.join(book_list) #保存数据 with open('shanhu.txt','a',encoding='utf-8') as f: f.write(book_str) f.write('\r\n') 基础模块主要是对requests模块提问比较多,功能还是比较完善,写一些小爬虫基本都用这个三方模块,面试话主要是这几个问题,当然自然是要掌握这个模块才能不变应万变,要从事爬虫和对爬虫有兴趣都必须要掌握这个模块的,下一篇我们讲一下爬虫解析库,未完待续…**
作者:guoguoguoerdan



python面试题 爬虫 模块 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号