网页访客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 >|&ensp;|&nbsp;||

  |', '', text1[0]).strip() #过滤含有<p>|&ensp;|&nbsp;|的符号 使用空格替换掉

#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'

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线