l2430478 发表于 2021-1-23 23:21

Python自学笔记(11)-------GET类网站爬取

本帖最后由 l2430478 于 2021-1-23 23:23 编辑

初窥门径之后,我才有能力给大家进行细节的教学,把复杂的文件超级简单化。


网站请求通常有两种:
一种是GET,比较常见的,举例www.sogou.com。
一种是POST,通过参数输入再次数据请求。举例:http://www.kfc.com.cn/kfccda/storelist/index.aspx


最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制的,而POST么有。 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Reques




我们首先打开www.sogou.com,可以看到是get



我们在搜过上输入 测试两个字
我们发现浏览器上变成了   

https://www.sogou.com/web?query=%E6%B5%8B%E8%AF%95
&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1033&sst0=1611412914616&lkt=0%2C0%2C0&sugsuv=00F317737334E66A5FE70325504F3395&sugtime=1611412914616

我们把&及后面的字全部删除,重新按回车,发现网页依然正常。

右键,选检查,


我们尝试写入代码



#先调用requests
import requests
#模拟headers   复制别人的就可以随便用
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                         'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
         }
#网址
url = 'https://www.sogou.com/web?query=%E6%B5%8B%E8%AF%95'
#来一次get请求
response = requests.get (url=url,headers= headers)



#.text∶返回的是字符串形式的响应数据
page_text =response.text

print(page_text)





非常简单的一段代码 已经进行了输出。
下面我么进行优化,否则只会爬取 “测试 ”
input能获取到我们输入的文字并设定成为keyword变量而设立字典params能够传递参数


#让用户输入搜索信息
keyword = input('enter a key word:')

#把携带的请求参数动态化写成一个字典
params = {
    'query':keyword
}





#实际网站为:https://www.sogou.com/web?query=测试,但加入params字典后,就可以去掉后面字符,
#进行搜索,?带web后面的问号也可以
url = 'https://www.sogou.com/web'


优化后如下:
#搜狗网页爬虫
import requests

#让用户输入搜索信息
keyword = input('enter a key word:')

#把携带的请求参数动态化写成一个字典
params = {
    'query':keyword
}
#伪装headers
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                         'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
         }
#指定url
#实际网站为:https://www.sogou.com/web?query=测试,但加入params字典后,就可以去掉后面字符,
#进行搜索,?带web后面的问号也可以
url = 'https://www.sogou.com/web'

#2,发起请求get方法的返回值为响应对象
#params参数(字典):保存请求时url携带的参数
response = requests.get (url=url,params=params,headers= headers)
#修改相应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding ='utf-8'
#3,获取响应数据
#.text∶返回的是字符串形式的响应数据
page_text =response.text






最后,我么加上输入保存本地 你不用会打这段代码会复制就行   fileName设定的是变量,是为了给保存的网页起个名字keyword是收入输入搜索的字   最终会在默认文件夹下输入一个测试.html


fileName = keyword+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取成功!')



最终代码如下:

#搜狗网页爬虫
import requests

#让用户输入搜索信息
keyword = input('enter a key word:')

#把携带的请求参数动态化写成一个字典
params = {
    'query':keyword
}
#伪装headers
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                         'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
         }
#指定url
#实际网站为:https://www.sogou.com/web?query=测试,但加入params字典后,就可以去掉后面字符,
#进行搜索,?带web后面的问号也可以
url = 'https://www.sogou.com/web'

#2,发起请求get方法的返回值为响应对象
#params参数(字典):保存请求时url携带的参数
response = requests.get (url=url,params=params,headers= headers)
#修改相应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding ='utf-8'
#3,获取响应数据
#.text∶返回的是字符串形式的响应数据
page_text =response.text

#4,持久化存储
fileName = keyword+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取成功!')



知味8848 发表于 2021-1-23 23:28

好有毅力哦,支持支持!!!

nulla2011 发表于 2021-1-23 23:31

学习一下

perfeito 发表于 2021-1-23 23:43

现在爬虫还不犯法吗

白金米老鼠 发表于 2021-1-23 23:48

学习一下。。。。。。

rbgaoshou 发表于 2021-1-24 10:09

必须学习,谢谢 !

gaofeng_pj 发表于 2021-1-24 14:27

perfeito 发表于 2021-1-23 23:43
现在爬虫还不犯法吗

不要商业能避免99%的法律风险

perfeito 发表于 2021-1-24 14:54

gaofeng_pj 发表于 2021-1-24 14:27
不要商业能避免99%的法律风险

那就是自己学习使用没问题了

gaofeng_pj 发表于 2021-1-24 15:40

perfeito 发表于 2021-1-24 14:54
那就是自己学习使用没问题了

逆向开发也是一样

深水夜藏 发表于 2021-1-24 17:30

感谢分享知识,剩下靠自己了
页: [1]
查看完整版本: Python自学笔记(11)-------GET类网站爬取