1. 正则表达式匹配带有换行符\n的内容:

1
2
3
4
5
6
eg.
"like_uin_info":[{"fuin":5414545,
"nick":"你好",
"portrait":"http://qlogo2.store.qq.com/qzone/541434545/541434545/30",
"gender":"女",
"constellation":""]

要匹配[]中的内容,因为带有\n,可以使用 [[\s\S]?] 不能使用[.],因为. 不能匹配\n
\n 匹配一个换行符。等价于 \x0a 和 \cJ
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

2.爬取哈工大就业信息网,出现 Remote end closed connection without response

  • 该爬虫是这两天才出现的这种错误,之前没有过
  • 通常远程服务器关闭连接的原因是通过检查UA或cookie来判断出了爬虫,但是我反复更新了cookie和UA,都没有作用
  • 在浏览器上检查,通过firefox发包得到的正确数据和爬虫的头部字段做对比,发现几乎一样
  • 但是唯一不一样的是,我头部的很多字段都是小写开头的,比如host, user-agent,因为印象中http协议中明确提出了区分大小写的只有method,所以忽略了这一点。但最终证明,确实是因为host字段错误,应该为 ‘Host’
  • 问题到这里就解决了,但是我想再探究一下为什么会这样。因为通常来说是不应该区分的,因为除了哈工大这个网站之外,另外几十个爬虫都没有出现这种问题,并且不可能是那些网站没有检查头部,因为印象中不少大学的网站都会检查 ‘Referer’这个字段,但是我一直写的是’referer’
  • 我又尝试了一下用浏览器发包,将’Host’改为’host’,结果能正确获取数据,但是请求头被改为’Host’,这很可能是浏览器改的。单步跟踪了一下requests, 发现requests并没有做这个工作。
  • 我试图确认Http协议中关于首部字段的描述,到底有没有说区分大小写。
  • RFC 2616 标准文档page 128 中并没有明确指出是否应该大小写,但是给出的例子中都是大写。然后把《HTTP权威指南》、《计算机网络–自顶向下》都翻了一下,也没有相应的描述。既然没有明确说明,那可能与具体的服务器程序实现有关。

3.四川大学就业信息网,爬虫突然出现 response 202…

点击量:154


发表评论

电子邮件地址不会被公开。 必填项已用*标注