wyft5t5 发表于 2019-8-12 22:05:41

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:08:47

本帖最后由 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码吗?

wyft5t5 发表于 2019-8-12 22:26:53

我想让爬取到的网页,自动判断一次,看看是UTF-8 , 还是GBK。然后分别套用不同的 decode 参数,该怎么处理呢?

wyft5t5 发表于 2019-8-12 22:40:01

本帖最后由 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转变后无法导出到文件,不知道为啥

wyft5t5 发表于 2019-8-13 21:41:49

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:14:36

本帖最后由 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-14 21:36:26

本帖最后由 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

wyft5t5 发表于 2019-8-17 19:07:21

urllib.request 和 requests对比
建议使用requests

https://blog.csdn.net/qq_38783948/article/details/88239109

lhr123 发表于 2023-2-16 10:29:12

学习
页: [1]
查看完整版本: python 中常用的爬虫模块——有错误的地方请大家指正