@spiritnotes
2016-05-11T16:47:38.000000Z
字数 2558
阅读 2264
网络采集
读书笔记
使用urllib.urlopen进行简单爬取
BS中的find和findall
nameList = bsObj.findAll("span", {"class":"green"}
for name in nameList:
print(name.get_text())
# keywords 使其可以有一个 与 关系过滤
其他BS对象
使用标签
正则表达式
正则表达式可以使用到beautifulSoup中用于标签的匹配和属性的匹配
bsObj.findAll(“img”, {"src":re.compile("\.......")})
soup.findAll(lambda tag: len(tag.attrs)==3)
获取属性 tag.attrs["src"]
深网:需要登陆或禁止搜索引擎爬取的
浅网:搜索引擎可以爬去的
暗网:通过tor等工具
采集整个网站
使用scrapy采集
四种方法
有些API需要验证后使用,用于计费或控制使用限制,通常是使用类似令牌(token)的方式调用,将token放入调用url中或放进请求头中。大多数反馈格式为XML或JSON(使用字节更少,JS可以直接处理)。
互联网上处理html还有其他很多文档,txt、jpg、avi等
content = bsObj.find("div", {"id","..."}).get_text()
content = bytes(content, "UTF-8")
content = content.decode("UTF-8")
data = urlopen(...csv).read().decode('ascii', 'ignore')
datafile = StringIO(data)
csvReader = csv.reader(datafile)
# dictReader
编写代码清洗数据
选择不含常用词汇出现次数较多(》=3次)的n-gram语句作为摘要
使用马尔科夫模型来随机生成句子
自然语言工具包:NLTK
使用Requests库
r = requests.post(url, params)
new_r = requests.get(new_url, cookies=r.cookies)
session = requests.Session()
s = session.post(url, login_params)
s = session.get(new_url ...)
常见库
使用 selenium 和 PhantomJs 模拟执行 JS 代码
from selenium import webdriver
import time
driver = webdriver.PhantomJS(executable_path='')
driver.get(url)
time.sleep(3)
driver.find_element_by_id('content').text
driver.page_source
driver.close()
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "loadedButton")))
OCR库:光学文字识别
修改请求头,使其更像浏览器
使用 selenium 和 PhantomJs 来获取cookie
driver.get_cookie()/delete_cookie()/add_cookie()/delete_all_cookie()
表单中可能具有一些隐含字段用以检测是否为抓取
避免蜜罐:通过表单中隐含字段或页面上的一些隐含img、url、文件或者任何可以被机器人读取而人不可见的内容用以判断是否机器人,进而可以进行封闭IP等操作
问题检测表
使用 unittest
使用 selenium,支持截屏
使用tor和pysocks
socks.set_default_proxy(socks.SOCKS, "localhost", 9150)
scoket.socket = socks.socksocket
urlopen(url).read()
selenium可以通过servive_args参数设置代理
互联网其实是一个用户界面不太友好的超级API