漯河市源汇区建设局网站,域名阿里云,专业企业网站建设定制,吃的网站要怎么做的今天给大家出一个关于Python爬虫面试题的总结#xff0c;相对于来说出现频率比较高的一些#xff01;1. 为什么 requests 请求需要带上 header#xff1f;原因是#xff1a;模拟浏览器#xff0c;欺骗服务器#xff0c;获取和浏览器一致的内容header 的形式#xff1a;字…今天给大家出一个关于Python爬虫面试题的总结相对于来说出现频率比较高的一些1. 为什么 requests 请求需要带上 header原因是模拟浏览器欺骗服务器获取和浏览器一致的内容header 的形式字典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}
复制代码用法 requests.get(url,headersheaders)2. 谈一谈你对 Selenium 和 PhantomJS 了解Selenium 是一个Web 的自动化测试工具可以根据我们的指令让浏览器自动加载页面获取需要的数据甚至页面截屏或者判断网站上某些动作是否发生。Selenium 自己不带浏览器不支持浏览器的功能它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。Selenium库里有个叫 WebDriver 的API。WebDriver 有点儿像可以加载网站的浏览器但是它也可以像BeautifulSoup 或者其他Selector 对象一样用来查找页面元素与页面上的元素进行交互 (发送文本、点击等)以及执行其他动作来运行网络爬虫。PhantomJS是一个基于 Webkit 的“无界面”(headless)浏览器它会把网站加载到内存并执行页面上的 JavaScript因为不会展示图形界面所以运行起来比完整的浏览器要高效。相比传统的Chrome或 Firefox 浏览器等资源消耗会更少。如果我们把 Selenium 和 PhantomJS 结合在一起就可以运行一个非常强大的网络爬虫了这个爬虫可以处理 JavaScrip、Cookie、headers以及任何我们真实用户需要做的事情。主程序退出后selenium 不保证 phantomJS 也成功退出最好手动关闭 phantomJS 进程。有可能会导致多个 phantomJS 进程运行占用内存。WebDriverWait 虽然可能会减少延时但是目前存在 bug各种报错这种情况可以采用 sleep。phantomJS爬数据比较慢可以选择多线程。如果运行的时候发现有的可以运行有的不能可以尝试将 phantomJS 改成 Chrome。3. 写一个邮箱地址的正则表达式[A-Za-z0-9\\u4e00-\\u9fa5][a-zA-Z0-9_-](\.[a-zA-Z0-9_-])$
复制代码4. 你遇到的反爬虫策略有哪些及应对策略有什么通过headers反爬虫基于用户行为的发爬虫例如同一IP短时间内多次访问同一页面或者同一账户短时间内多次进行相同操作动态网页反爬虫例如我们需要爬取的数据是通过ajax请求得到或者通过JavaScript生成的对部分数据进行加密处理的例如我们要抓的数据部分能够抓到另外的部分加密处理了是乱码应对策略对于基本网页的抓取可以自定义headers,添加headers的数据代理来解决
有些网站的数据抓取必须进行模拟登陆才能抓取到完整的数据所以要进行模拟登陆。
对于限制抓取频率的可以设置抓取的频率降低一些
对于限制ip抓取的可以使用多个代理ip进行抓取轮询使用代理
针对动态网页的可以使用seleniumphantomjs进行抓取但是比较慢所以也可以使用查找接口的方式进行抓取。
对部分数据进行加密的可以使用selenium进行截图饭后使用python自带的 pytesseract库进行识别但是比较慢最直接的方法是找到加密的方法进行逆向推理。
复制代码5. 分布式爬虫原理scrapy-redis实现分布式其实从原理上来说很简单这里为描述方便我们把自己的核心服务器称为 master而把用于跑爬虫程序的机器称为 slave。我们知道采用 scrapy 框架抓取网页我们需要首先给定它一些 start_urls爬虫首先访问 start_urls里面的 url再根据我们的具体逻辑对里面的元素、或者是其他的二级、三级页面进行抓取。而要实现分布式我们只需要在这个 starts_urls 里面做文章就行了。我们在 master 上搭建一个 redis 数据库注意这个数据库只用作 url 的存储不关心爬取的具体数据不要和后面的 mongodb 或者 mysql 混淆并对每一个需要爬取的网站类型都开辟一个单独的列表字段。通过设置 slave 上 scrapy-redis 获取 url 的地址为 master 地址。这样的结果就是尽管有多个 slave然而大家获取 url 的地方只有一个那就是服务器 master 上的 redis 数据库。并且由于 scrapy-redis 自身的队列机制slave 获取的链接不会相互冲突。这样各个 slave 在完成抓取任务之后再把获取的结果汇总到服务器上这时的数据存储不再在是 redis而是 mongodb 或者mysql等存放具体内容的数据库了这种方法的还有好处就是程序移植性强只要处理好路径问题把 slave 上的程序移植到另一台机器上运行基本上就是复制粘贴的事情。6. pythoon2.x 中urllib和urllib2的区别异同都是做url请求的操作的但是区别很明显。
urllib2可以接受一个Request类的实例来设置URL请求的headersurllib仅可以接受URL。这意味着你不可以通过urllib模块伪装你的User Agent字符串等伪装浏览器。
urllib提供urlencode方法用来GET查询字符串的产生而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
模块比较优势的地方是urlliburllib2.urlopen可以接受Request对象作为参数从而可以控制HTTP Request的header部。
但是urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有被加入urllib2中因此有时也需要urllib的辅助。
复制代码7.robots协议是什么Robots协议也称为爬虫协议、爬虫规则、机器人协议等也就是robots.txt网站通过robots协议告诉搜索引擎哪些页面可以抓取哪些页面不能抓取。Robots协议是网站国际互联网界通行的道德规范其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯。因其不是命令故需要搜索引擎自觉遵守。8.什么是爬虫爬虫是请求网站并提取数据的自动化程序9.爬虫的基本流程1、通过http库向目标站点发起请求即发送一个Request请求可以包含额外的headers等信息等待服务器响应
2、如果服务器能正常响应会得到一个ResponseResponse的内容比啊是索要获取的页面内容
3、解析内容正则表达式、页面解析库、json
4、保存数据文本或者存入数据库
复制代码10.什么是Request和Response本地 向 服务器 发送Request服务器根据请求返回一个Response页面就显示在页面上了1、浏览器就发送消息给该网址所在的服务器这个过程叫做Http Request2、服务器收到浏览器发送的消息后能够根据浏览器发送消息的内容做相应处理然后把消息回传给浏览器这个过程叫做HTTP Response3、浏览器收到服务器的Response消息后会对信息进行相应处理然后显示下期会继续为大家更新更多关于Python爬虫的面试题总结转载于:https://juejin.im/post/5d551d3a518825371070e57c