- Python代码以缩进表示一个代码块,故要格外注意代码的缩进,你的爬虫不能运行有可能就是你的方法和类并列了
- Python是大小写敏感的,写错了,会报错
- 杀掉进程:kill -9 爬虫进程编号
- 检查已启动的爬虫./check py
- 查看redis key:
keys *:查看当前redis key
flushall:清空redis key
llen key:查看redis key中存放的链接数
- 在爬虫目录下启动爬虫并将日志信息(错误和正确都输出)输出到指定文件,返回进程编号: nohup python start_append.py > /root/logs/WeiY_imp.log 2>&1 &
- Vi进入文件编辑状态;
- i启用编辑;
- esc->:wq!保存并退出,:q!是不保存退出;
- 将数据从A数据表复制到B数据表时,直接使用insert,效率高,若使用循环一条一条插入效率较慢;
- Scrapy创建python项目:cmd->scrapy startproject 项目名称->cd爬虫项目文件目录下scrapy genspider 爬虫文件名 爬取的网站链接
- 运行爬虫文件:scrapy crawl 爬虫名称(必须在项目目录下打开cmd执行)
- num=re.findall(r"=(.+?)",” http://www.ioncol.com/article/NewsList.aspx?tp=5”),第一个参数为匹配规则,第二个为字符串,=(.+?)匹配等号后的所有字符;(.+?)可以放在任意字符之间和前后,如字符串”a123b”,那么a(.+?)b获取到的就是123
- \s*:匹配空格;[:]匹配冒号;\d{1,2}:匹配一位或两位数字;/不需要转义
- 如:字符串为“作者: 宫子木 杨威 日期:2016/12/11 0:21:40”,使用泽正匹配日期:“\d{4}/\d{1,2}/\d{1,2}\s*\d{1,2}[:]\d{2}[:]\d{2}”,成功匹配2016/12/11 0:21:40
- sort_new=re.sub(r'\s+','',sort_name[1]):替换字段中的空格
- url解码使用urllib中的unquote,对应编码为quote;encode为编码,decode为解码,python 中的默认编码是unicode,在爬虫文件第一行写“# -*- coding: utf-8 -*-”表示使用utf-8进行编码
- sort=re.sub(r'\s+','',sort_name[1]):将sort_name[0]中的所有空格替换掉,\s+表示所有空格
- 匹配两个特定字符间的内容:re.findall(r'.*科室:(.*) .*',’
任职机构:北京市急救中心 所在科室:急诊科
’),匹配结果:急诊科
- search(pattern, string, flags=0) 在一个字符串中查找匹配
- findall(pattern, string ,flags=0) 找到匹配,返回所有匹配部分的列表
- sub(pattern, repl, string , count=0, flags=0) 将字符串中匹配正则表达式的部分替换为其他值
- split(pattern, string ,maxsplit=0, flags=0) 根据匹配分割字符串,返回分隔符串组成的列表
- //span[text()="我的文章"]/following-sibling::span[1]:取位于span[text()="我的文章"]节点后的同级标签span[1]的内容;preceding-sibling取位于自身标签前的同级标签;parent取父节点
- Lpush,rpush是会有重复链接,即从左或右给集合中放链接;sadd无重复链接,将链接放入set中,若使用sadd需要修改中间件中Retry的类,否则会报错
- 查找字符串中是否包含某字符,可以使用正则方法,也可以使用python内置函数find,会返回该字符起始位置的索引,若字符在字符串的开头位置则返回0,若找不到字符则返回-1
- 使用list前先定义好
-----------------------------------------------补充-------------------------------------------------------------------
- redis和单机最好不要混用,循环range(1,10),有1没有10。
- DNS lookup failed: no results for hostname lookup: 域名不正确,查看链接是否拼接正确
- Redirecting (301):重定向,解决办法:加请求头加cookie,若依旧不行,可依据网站方法解决:https://www.jianshu.com/p/b9c832977c00
- setting里填上REDIRECT_ENABLED = False 设置禁止重定向
- 使用json.load()和json.loads()加载json数据,获取到的数据是dict类型(可使用type()查看数据类型)。详解两种方法:https://blog.csdn.net/xiongchengluo1129/article/details/78779418
- 使用json.loads()加载json数据:https://www.cnblogs.com/gide/p/5247146.html
- replace只能用于字符串替换,re.subn(正则表达式,新字符,要替换的字符串)可以用于正则替换
- Ajax异步请求中的数据(例如:百度学术,采集固定年份的数据):使用header中的请求链接,并将form data中的放入字典中作为参数与请求一起发送。但是部分请求的data必须放在url中,如:(爬虫文件:smiic/request_spider)
-----------------------------------补充----------------------------------------------
- 创建set集合有两种:s={}或set()函数创建,但是如果要创建一个空set集合,则必须使用set()函数创建
- 线程池:https://www.cnblogs.com/freeman818/p/7154089.html#undefined。文件位置:爬虫smiic中eee.py
- python中的for循环不是传统的for循环,python的for循环不适用索引,使用迭代器,迭代器是惰性的,只能使用一次,在已经遍历了一次的情况下,是无法进行二次迭代的。原文链接:https://blog.csdn.net/bruce_6/article/details/81025444