本帖最后由 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
我们把&及后面的字全部删除,重新按回车,发现网页依然正常。
右键,选检查,
我们尝试写入代码
[Python] 纯文本查看 复制代码
#先调用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'
优化后如下:
[Python] 纯文本查看 复制代码 #搜狗网页爬虫
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
#实际网站为:[url=https://www.sogou.com/web?query=]https://www.sogou.com/web?query=[/url]测试,但加入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,'爬取成功!')
最终代码如下:
[Python] 纯文本查看 复制代码 #搜狗网页爬虫
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
#实际网站为:[url=https://www.sogou.com/web?query=]https://www.sogou.com/web?query=[/url]测试,但加入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,'爬取成功!')
|