- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Python爬虫面试题及答案(实战版)
1.常用Python爬虫库有哪些?requests和urllib的核心区别是什么?
答案:
常用库:requests(请求)、BeautifulSoup/XPath(解析)、selenium/Pyppeteer(动态页面)、Scrapy(分布式框架)、pymongo/pymysql(数据存储)。
核心区别:
requests是第三方库,API更简洁,比如POST请求直接传data参数,无需手动编码;urllib是Python标准库,需用urllib.parse.urlencode()处理参数,步骤繁琐。
requests自带连接池,重复请求同一域名更高效;urllib每次请求都新建连接,性能稍差。
异常处理:requests的RequestException体系更清晰,比如超时、HTTP错误可精准捕获;urllib的异常类较分散(如URLError、HTTPError)。
2.爬取需要登录的页面,有哪些实现方式?实际项目中更推荐哪种?
答案:
两种核心方式:
直接携带Cookie:登录后从浏览器F12的「Application-Cookies」复制Cookie,放到requests的headers里(如headers={Cookie:xxx})。
会话保持:用requests.Session(),先发送登录POST请求(携带账号密码参数),Session会自动保存登录Cookie,后续请求直接用Session对象即可。
推荐第二种:Cookie有过期时间,直接复制需频繁更新;Session能模拟真实用户登录流程,尤其适合需要验证码、token的场景(需先从登录页提取token参数)。
3.遇到JavaScript动态加载的内容(如滚动加载列表),怎么爬?
答案:三种方案,按效率优先级排序:
抓包找API:F12打开「Network-XHR」,触发加载动作,找到返回JSON数据的接口(如list?page=1size=20),直接用requests请求接口,效率最高(无需加载页面)。
提取隐藏数据:有些页面会把动态数据藏在HTML的script标签里(如window.__INITIAL_DATA__={...}),用正则提取这段JSON字符串,解析即可。
模拟浏览器:用selenium/Pyppeteer启动真实浏览器,滚动页面或等待加载完成后提取数据。缺点是耗资源、速度慢,适合前两种方案走不通的场景(如加密严重的页面)。
4.网站封IP了怎么办?怎么避免被封?
答案:
被封后解决:换IP(手机热点、代理),清除浏览器Cookie,等待IP解封(通常几小时到几天)。
避免被封的核心手段:
用IP代理:在requests中设置proxies={http:http://ip:port,https:https://ip:port},最好搭代理池(如用「proxy_pool」开源项目),避免单一代理失效。
控制请求频率:用time.sleep(random.randint(1,3))随机延迟,或用scrapy的DOWNLOAD_DELAY设置全局延迟,模拟人类操作速度。
随机User-Agent:用fake-useragent库生成不同浏览器的UA(如fromfake_useragentimportUserAgent;ua=UserAgent().chrome),避免默认python-requests/xxx被识别。
分布式爬取:多台机器用不同IP同时爬,分摊请求压力(需配合Redis做URL去重)。
5.XPath和CSS选择器怎么选?举个实际提取场景的例子。
答案:
选择原则:简单结构用CSS,复杂查找用XPath。
CSS优势:语法简洁,选类用.、选ID用#,比如duct-listulli(选product-list下的li)。
XPath优势:支持父节点查找(..)、文本内容匹配(text())、属性模糊匹配(contains()),这些CSS做不到。
例子:提取「文本为“立即购买”的按钮链接」:
XPath://a[text()=立即购买]/@href(直接按文本找,精准)。
CSS:无法直接按文本匹配,需先选所有a标签再遍历判断文本,效率低。
再比如:提取「class包含“active”的li的父div」:
XPath://li[contains(@class,active)]/..(直接找父节点)。
CSS:做不到,需先选li再通过代码找父元素。
6.爬虫怎么处
您可能关注的文档
最近下载
- 中医治疗带状疱疹后遗神经痛的研究.doc VIP
- 江铃-江铃E400-产品使用说明书-E400豪华型-JX70021BEV-江铃E400使用说明书.pdf VIP
- ISO IEC 27017-2015 信息技术--安全技术--基于ISO IEC 27002的云服务信息安全控制实践准则.pdf
- 脑疝病人的护理课件(完整版).pptx VIP
- 4-6岁 《游来游去的水母》-美术课件.ppt VIP
- 100个超级有趣的冷知识.pdf VIP
- 指挥调度系统项目可行性研究报告.docx VIP
- 公司节能减排方案.pptx VIP
- RBANS记录表(精分,重度抑郁,焦虑障碍,正常对照).docx VIP
- 重症医学科绩效考核.ppt VIP
文档评论(0)