爬虫部分:
- 在 requests 模块中,requests.content 和 requests.text 什么区别
- 简要写一下 lxml 模块的使用方法框架
- 说一说 scrapy 的工作流程
- scrapy 的去重原理
- scrapy 中间件有几种类,你用过哪些中间件
- 你写爬虫的时候都遇到过什么?反爬虫措施,你是怎么解决的?
- 为什么会用到代理?
- 代理失效了怎么处理?
- 列出你知道 header 的内容以及信息
- 说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。
- 爬取速度过快出现了验证码怎么处理
- scrapy 和 scrapy-redis 有什么区别?为什么选择 redis 数据库?
- 分布式爬虫主要解决什么问题
- 写爬虫是用多进程好?还是多线程好? 为什么?
- 解析网页的解析器使用最多的是哪几个
- 需要登录的网页,如何解决同时限制 ip,cookie,session(其中有一些是动态生成的)在不使用动态爬取的情况下?
- 验证码的解决?
- 使用最多的数据库(mysql,mongodb,redis 等),对他的理解?
正则部分:
- 1)使用正则表达式匹配出www.baidu.com中的地址 2)a=“张明 98 分”,用 re.sub,将 98 替换为 100
- 正则表达式匹配中(.)和(.?)匹配区别?
- 写一段匹配邮箱的正则表达式
1 在 requests 模块中,requests.content 和 requests.text 什么区别
答:
.text返回的是Unicode型数据,如果想获取文本,就可以用.text方法
.content返回的是bytes型,也就是二进制数据,所以如果想获取图片,音视频,文件等,就可以用.content方法
2 简要写一下 lxml 模块的使用方法框架
答:
(例:)
from lxml import html
source='''
<div class="nam"><span>中国</span></div>
root=html.fromstring(source)
_content=root.xpath("string(//div[@class='nam'])")
if _content and isinstance(_content,list):
content=_content[0]
elif isinstance(_content,str):
content=_content
print(content)
lxml中主要有两部分,
[第一部分]
etree
主要可以用来解析XML字符串,
内部有两个对象,etree._ElementTree和etree._Element
etree.Element对象中包含的属性和方法:
属性:
1)tag,返回该节点的名称:
print 'root.tag' 输出tag
2)text,设置该节点的文本:
root.text = 'hello world' 输出hello world
3)tail,在标签后边追加文本:
root.tail = 'hym' 输出hello worldhym
方法:
1)Element(string),创建一个Element对象:
root = etree.Element('root')
#返回一个XML的节点,名称root
`root = etree.Element('root', interesting='totally')`
#返回一个root节点,属性interesting = 'totally'
2)set(name,value),为已有的节点,添加属性
root.set('hello', 'huhu')
#增加一个属性hello = 'huhu'
3)get(string),返回属性值,
root.get('intersting') 返回‘tot