网页访客qq抓取(爬虫请求方法获取的方法详解-苏州安嘉 )
优采云 发布时间: 2022-01-30 16:12网页访客qq抓取(爬虫请求方法获取的方法详解-苏州安嘉
)
一.爬虫请求方法
1.模块名称:urllib.resquest
2.导入方式:
import urllib.resquest
from urllib import request
3.使用的方法
req = request.Request(url,headers=headers)
res = request.urlopen(req)
html = res.read().decode('utf-8')
方法详情:
方法:
urllib.resquest->向网站发起请求,
request.urlopen->获取对应的响应对象,也可以理解为打开我们需要的URL
res.read()->获取对应网页的内容
范围:
URL:需要爬取的URL的URL
timeout:设置等待超时的时间。如果在指定时间内没有响应,则应抛出异常。
响应的方法(响应对象):
也就是我们对得到的响应对象进行相应的操作。
1.response.getcode->获取我们对应的对象状态码
值得注意的是,当状态码为200时,>表示网页可以正常访问。
2.response.read()->返回对应的html
()->获取头信息
4.response.geturl->获取对象对应的url
值得注意的是,网页只有在状态码为200时才能正常访问。这种情况下,我们可以设置try语句,在里面设置获取我们对应的状态码的方法,我们可以捕获对应的错误
其中 URL 是 IE 地址栏上的字符串,例如
像这样导入的好处:
其实我们可以使用 urlopen 方法来发起最基本的请求。如果请求中需要添加headers(请求头)等信息,我们可以模拟为浏览器访问。然后我们可以使用更强大的 Request 类来构造一个请求。
浏览器输入网址-F12-查看网络-左侧浏览器-查看标题
例如:
import urllib.request
url="https://blog.csdn.net/qq_36411874/article/details/83615704"
req=urllib.request.Request(url)
#实现浏览器模式
req.add_header("User-Agent"," Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36")
data=urllib.request.urlopen(req).read()
注意其中 urlopen 的用法:
我们可以直接从urllib2导入它的方法,注意和上面使用的区别
from urllib2 import urlopen
doc = urlopen("http://www.baidu.com").read()
print doc
抓取操作的另一种方法:
直接使用 requests 模块:
如何导入:
from urllib import request
from urllib.request import urlopen
指示:
res = requests.get(url,data)
res.read()
详细解释:
requests.get()->方法直接应用于对应的网页,返回对应的响应对象
res.read()->返回网页的内容
data 参数表示用于提交到 URL 的数据的方法。如果提供了命中数据,则将使用 post 请求方法。如果为空,将使用get请求方法。我们在使用的时候一般都设置为None。而且他在使用前需要使用urllib.parse.urlencode()函数将其转换成数据流。
二.encoding-字符串编码:
当我们读写文件的时候,或者我们需要明确指出需要的编码方式:获取到我们爬取的对象后,需要获取其中的内容。那是你无论如何都需要设置他的编码的时候。
它是一个收录字符集、编码方案等的标准。由于ASCII码只能编码英文字符,具有很大的局限性,而Unicode为每种语言中的每个字符都设置了统一且唯一的二进制编码,以满足跨语言的需求。语言和跨平台的文本转换和处理。要求 2. 所有 Unicode 字符都可以在这里找到。
GBK采用单双字节变长编码,英文采用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
其中,decode()是指按照一定的规则将“字节流”转换为“文本”,可以理解为encode的逆过程
"""
# @Time : 2020/4/16
# @Author : JMChen
"""
import requests
from urllib import request
import re
from urllib.request import urlopen
url = 'http://www.swu.edu.cn/xxgl_msfc.html'#修改
respond = requests.get(url)
respond.encoding = 'gb2312'#
p = re.compile('.html" target="_blank">([\u4e00-\u9fa5][\u4e00-\u9fa5\\s]+)</a>')#创建抓取的规则
every_name = p.findall(respond.text) #修改
every_num = re.findall('<a href="xywh/msfc/(\w+).html" target="_blank">', respond.text)#修改
i=1
info=list(zip(every_num,every_name))
##for x in info:
## i=i+1
## print(x)
##print("sum=",i)
count = 1
#print(type(info))
for man in info[:2]:
man_url = 'http://www.swu.edu.cn/xywh/msfc/{}.html'.format(man[0]) #修改
man_respond = requests.get(man_url)
man_respond.encoding = 'gb2312'
#text1 = re.findall('(.*?)', man_respond.text, re.S) #有一个参数为re.S表示“.”(不包含外侧双引号,下同)的作用扩展到整个字符串,包括“\n”。
text1 = re.findall('(.*?)', man_respond.text, re.S)#抓取相应网页的内容
text2 = re.sub(r'<p >| | ||
|', '', text1[0]).strip() #过滤含有<p>| | |的符号 使用空格替换掉
#print(text2)
file_name = man[1]#提取相应的网页之中的名字
with open(file_name+'.txt', mode='a+', encoding="utf-8") as f:
f.write('{}. '.format(count) + text2 + '\n')
count += 1
photo = r'