python 中常用的爬虫模块——有错误的地方请大家指正
本帖最后由 wyft5t5 于 2019-8-12 22:10 编辑1、urllib —— 这其实是一个包,里边有四个模块,只有一个比较常用,安装方法 pip install urllib
2、下边是编码举例:
——————————————————————————————————————————————————————————
import urllib.request as a # 导入这个比较常用的模块,模块里就一个方法(函数)比较常用
b=a.urlopen("https://fishc.com.cn/forum.php")#通过这个方法打开,读取到网页路径,实现对目标url的访问
c=b.read()#读取网页的内容,此时读取到的网页是以utf-8编码的bytes对象,一般看不懂
print (c)
print (type(c))#此时格式:<class 'bytes'>
d=c.decode("utf-8","ignore")
# 将其解码,变成unicode格式的编码,我们可以看懂
# 这里有一个需要注意的问题很多网页的编码不是utf-8的,使用ignore可以忽略其他的编码格式
# 比如我们这个网页的编码就是 charset=gbk,此时我们可以看到网页能打印出来,但是所有的中文都变成了乱码
# 所以我们这个定义的正确方法是d=c.decode("gbk","ignore")
# 注意:不能写成 d=c.decode("utf-8","gbk","ignore") ,"utf-8"和"gbk"不能同时使用
print (d)
print (type(d))#此时格式:<class 'str'> 本帖最后由 wyft5t5 于 2019-8-12 22:24 编辑
上边的例子,我想将c里边的内容遍历出来,所以做了如下操作:
import urllib.request as a
b=a.urlopen("https://fishc.com.cn/forum.php")
c=b.read()
for s in c:
print (s)
print (type(s))
但是打印的结果:
60
33
68
79
67
……
47
104
116
109
108
62
<class 'int'>
遍历出来的 S 为啥会是一堆数字啊???是每一个字母,符号所代表的ASKII码吗? 我想让爬取到的网页,自动判断一次,看看是UTF-8 , 还是GBK。然后分别套用不同的 decode 参数,该怎么处理呢? 本帖最后由 wyft5t5 于 2019-8-12 22:42 编辑
将爬取的数据导出到一个txt文本上
import urllib.request as a
b=a.urlopen("https://fishc.com.cn/forum.php")
c=b.read()
d=c.decode("gbk","ignore")
print (c)
print(type(c))#c的格式是<class 'bytes'>
with open("小甲鱼.txt",'wb') as f:
f.write(c)
注意两件事:
1、将print (c)得到的结果,跟f.write(c)对比会发现二者明显不同;
f.write(c) 的结果跟 d=c.decode("gbk","ignore") 相同
2、f.write(d) 会报错,经过.decode转变后无法导出到文件,不知道为啥 from urllib.parse import urlencode#将中文解码,正常在爬取时,无法识别中文
from urllib.parse import urlencode#将中文解码,正常在爬取时,无法识别中文
def book(a,b):
a=a.rstrip()#.rstrip()——去掉右边的空格
c={"keyword":b}#将b包装成一个字典
d=(a+"search.php?")+urlencode(c)#urlencode将字典里的值解码成一个计算机识别的格式,人识别不了
return d
x=input("请输入网址:")
y=input("请输入书名:")
z=book(x,y)
print(z) 本帖最后由 wyft5t5 于 2019-8-14 20:52 编辑
requests模块是用于第一步获取HTML页面信息; requests库用于爬取HTML页面,提交网络请求,基于urllib,但比urllib更方便;
requests.get():
获取HTML网页的主要方法,对应于HTTP的GET
https://www.cnblogs.com/ranxf/p/7808537.html
____________________________________________________________________
用pip install requests 命令安装 requests模块时,没有安装成功。
可以用一下清华镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
____________________________________________________________________
import requests
a = requests.get("https://movie.douban.com/top250")
b=a.content
c=a.text
print(a)#结果是<Response >
print(type(a))#结果是<class 'requests.models.Response'>
print (b)#结果是给电脑看的编码
print(type(b))#结果是<class 'bytes'>
print (c)#结果是网站的完整编码,给人看的
print(type(c))#结果是<class 'str'>
本帖最后由 wyft5t5 于 2019-8-20 13:39 编辑
Beautiful Soup模块
https://www.jianshu.com/p/26a3632796dd
https://www.jb51.net/article/166356.htm
https://cuiqingcai.com/5548.html
https://www.jb51.net/article/149247.htm
urllib.request 和 requests对比
建议使用requests
https://blog.csdn.net/qq_38783948/article/details/88239109 学习
页:
[1]