关于爬虫的一些东西

      这几天在写一个爬虫,实际上整个过程和思路很简单,难点在于繁杂的格式处理和一些未知的小问题,还有对python不太熟悉.基本上是边学边写.记录一些过程中值得记住的东西.

关于python的:

1.文件的开头要用###coding:utf-8

2.创建文件夹可以要import os

os.mkdir(r'./newdir/')

tips:字符串前加r的作用是取消后面字符串的转义.

3.创建文件的操作是

f = open(r'./1.txt','w+')

f.write('123')

text = f.read()

f.close()

其中第一步的操作中第二个参数的作用是指定读写类型.

w       以写方式打开,
a        以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+      以读写模式打开
w+     以读写模式打开 (参见 w )
a+      以读写模式打开 (参见 a )
rb      以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab      以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+   以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )

4.异常捕获的语句体为

try:

   语句块1

except:

   语句块1出错时的语句块

5.用python dict得到的key:value可以直接转成json格式.

第一步要导入from json import *

第二步 生成一个dict 比如字典d

第三步 转换成json格式 jsn=JSONEncoder().encode(d)

tips:有一些在线的json格式检测网站可以检测json格式是否正确.json是一种格式,而不是一种文件类型.他的本质还是str.所以第三步之后输出print type(jsn)得到的结果是str

关于BeautifulSoup

1.下载安装

地址:http://www.crummy.com/software/BeautifulSoup/bs4/download/4.2/

安装(ubuntu)

tar -xzvf beautifulsoup4-4.2.0.tar.gz

进入解压后的目录然后执行

python setup.py build

sudo python setup.py install

除此之外还可以用install命令进行安装

直接sudo apt-get install python-bs4

然后导入时使用from bs4 import BeautifulSoup

2.使用BeautifulSoup

from bs4 import BeautifulSoup

import urllib2

url = 'http://xxxx.com'

html = urllib2.urlopen(url)

soup = BeautifulSoup(url)

divAll = soup.findAll('div')

for div in divAll:

   print div

3.需要格外注意的.

对网页的抓取,BeautifulSoup可以很好很精确的抓指定标签,但是在一些时候并不能很好的抓取标签中的完整内容.这个问题曾一度让我怀疑BeautifulSoup的能力,后来查了资料才知道,原来这和BeautifulSoup没什么关系,而是解析器的问题,在默认情况下,BeautifulSoup使用html.parser这个解释器,它速度很快,但是解析力纠错力不足,有时候当出现标签嵌套和</br>混合时,及其容易错误解析.从而造成内容不全,乱码等问题.还有一个解析器,名字是lxml,这个解析器的解析力和纠错力比html.parser要强,但是面对多嵌套和</br>混合使用的时候有时候也常常犯错,最后一个是html5lib解析器,它的解析纠错能力极强,但是解析速度较慢.我们可以根据需要选取适当的解析器.

如何指定解析器呢?

在2中 soup = BeautifulSoup(html,'解析器名')其他不变就可以了.

例如. soup = BeautifulSoup(html,'html5lib')

注意html5lib这个库需要下载

sudo apt-get install python-html5lib

就可以了,然后在python中直接使用,无需import

关于抓js动态渲染页面的.

这个可以使用pyqt中的一个库,QWebkit

具体可以

from PyQt5.QtWidgets import *

from PyQt5.QtCore import *

from PyQt5.QtWebKitWidgets import *

不过这种方法比较慢,它相当于用一个没有界面的浏览器把页面加载进去,然后把用js动态渲染完的页面拿出来.

一般来说,可以通过读它前端的js脚本来了解它的行为,一般来说一个事件会触发一个ajax请求,分析出它的请求地址,就可以进行模拟请求得到它想要动态渲染的内容了.这方面还有很多需要研究的地方.比如如何使用审查元素当中的功能快速定位和分析js的行为.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值