通用爬虫模块使用(上)(代码片段)

eyes++ eyes++     2022-12-31     132

关键词:

一:爬虫的流程

爬虫的分类

爬虫分为两种:通用爬虫和聚焦爬虫

  • 通用爬虫:通常指搜索引擎的爬虫
  • 聚焦爬虫:针对特定网站的爬虫

两种爬虫的工作流程

二:HTTP与HTTPS

URL的形式:

HTTP请求形式:

HTTP常用请求头:

有关HTTP与HTTPS的详情可以看看我的另一篇博客,这里就不赘述了。HTTP详解

三:requests库发送请求和获取网页的字符串

打开命令行工具–>进入python环境–>导入requests包–>请求网站数据–>打印返回结果类型

response有很多属性操作

  • response.text,可以打印出响应的内容,
  • response.encoding,查看默认解码方式,默认解码方式是根据HTTP头部对响应的编码做出有根据的推测的方式,不过可能会推测错误。
  • response.encoding = “utf-8”,设置解码方式
  • response.content,返回bytes类型数据
  • response.content.decode(),解码bytes数据
  • response.content.decode(“gbk”),可以设置解码方式

更推荐使用response.content.decode()方式获取响应的html页面


四:使用requests保存图片

代码如下:

# coding=utf-8
import requests

# 发送请求
response = requests.get("https://docs.python-requests.org/zh_CN/latest/_static/requests-sidebar.png")

# 保存
with open("a.png", "wb") as f:
    f.write(response.content)

效果如下:

五:requests发送带headers的请求

response = requests.get(url),其中response的常用方法如下:

  • response.text
  • response.content
  • response.status_code
  • response.request.*
  • response.url
  • response.headers

一些用法:

import requests
response = requests.get("https://www.baidu.com")

print("响应状态码:", response.status_code)
print("响应头:", response.headers)
print("请求:", response.request)
print("请求的地址:", response.request.url) # 如果被网站重定向了,则请求的地址与响应的地址会不同
print("响应的地址:", response.url)
print("请求头:", response.request.headers)
print("请求体:", response.request.body)
print("请求钩子:", response.request.hooks)
print("请求方式:", response.request.method)

结果:

为了正确爬取数据,需要在请求时带上header,模拟浏览器,欺骗服务器,获取和浏览器一致的内容。之前使用response.content.decode()只能获取少量数据,具体可以见前面的测试,但设置请求头模拟浏览器后可以获得大量数据,就像浏览器访问一样。

import requests
# 获取请求头,一般而言带上User-Agent就可以了,如果不行,则可以尝试Accept,Host,Cookie之类的
headers = "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
# 请求头在第二个参数
response = requests.get("https://www.baidu.com", headers=headers)

print(response.content.decode())

六:requests发送带参数的请求

一般的请求都是带参数的,如下百度搜索:

整条链接如下,?号后面,&连接且A=B形式的都是参数:

https://www.baidu.com/s?wd=python&rsv_spt=1&rsv_iqid=0xc6f3adb20001c17d&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=&rsv_enter=1&rsv_btype=i&rsv_dl=ib&inputT=6532

但不是所有参数都是必须的,经过尝试发现,只有wd=python是必须的,即传入的搜索的参数。

那么现在就可以尝试让请求带参数了:

  • 参数形式:字典
  • p=‘wd’=‘python’
  • 用法:requests.get(url,params=p)
import requests
# 请求地址
url = "https://www.baidu.com/s?"
# 获取请求头,一般而言带上User-Agent就可以了,如果不行,则可以尝试Accept,Host,Cookie之类的
headers = "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
# 携带参数
p = 'wd':'python'
# 发请求
response = requests.get(url, headers=headers, params=p)

print(response.content.decode())

七:贴吧爬虫

这里我爬取的是百度贴吧里的原神吧,代码如下:

# coding=utf-8
import requests

class Tieba:
    def __init__(self, name):
        self.tieba_name=name
        self.url_temp = "https://tieba.baidu.com/f?kw=" + name + "&ie=utf-8pn="
        self.headers="User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"

    def get_url_list(self):  # 构造url列表
        url_list = []
        for i in range(1000):
            url_list.append(self.url_temp.format(i + 50))
        return url_list

    def parse_url(self, url): # 发送请求,获取响应
        response = requests.get(url, headers=self.headers)
        return response.content.decode()

    def save_html(self, html_str, page_num): # 保存html字符串
        file_path = "page/--第页.html".format(self.tieba_name, page_num)
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(html_str)
        print("成功爬取:", file_path)

    def run(self):  # 实现主要逻辑
        # 1.构造url列表
        url_list = self.get_url_list()
        # 2.遍历,发送请求,获取响应
        for url in url_list:
            html_str = self.parse_url(url)
            # 3.保存
            page_num = url_list.index(url) + 1
            self.save_html(html_str, page_num)


if __name__ == '__main__':
    tieba = Tieba("原神")
    tieba.run()


想了解更多相关知识的话可以前往我的个人网站看看:eyes++的个人空间

爬虫-考核题(代码片段)

...爬虫时先下载到本地进行测试,然后再进行正规的验证1.通用爬虫:通用爬虫是搜索引擎(Baidu、Google、Yahoo等)“抓取系统”的重要组 查看详情

爬虫原理与数据抓取-----(了解)通用爬虫和聚焦爬虫(代码片段)

通用爬虫和聚焦爬虫根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种.通用爬虫通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形... 查看详情

python---爬虫相关性能(各个异步模块的使用,和自定义异步io模块)(代码片段)

一:线程池,进程池等相关文章了解python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用)python---基础知识回顾(十)进程和线程(协程gevent:线程在I/O请求上的优化)python---异步IO(asyncio)协程二:异... 查看详情

爬虫简介和requests模块(代码片段)

目录爬虫介绍requests模块requests模块1、requests模块的基本使用2、get请求携带参数,调用params参数,其本质上还是调用urlencode3、携带headers,请求头是将自身伪装成浏览器的关键4、带cookie5、发送post请求(注册,登陆),携带数据(bod... 查看详情

爬虫——综合案例流程版(代码片段)

爬虫综合案例开发步骤:导入类库创建爬虫通用类初始化init方法类中编写重试下载模块类中编写真正下载模块类外编写保存函数类外编写获取robots.txt函数类外编写抽取网址函数类中编写网址正常化函数创建下载限流类爬虫通用... 查看详情

爬虫---06.scrapy框架初始(代码片段)

...异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。-框架:集成了很多功能且具有很强通用性的一个项目模板-如何学习框架:-学习框架的功能模块的具体使用。 二.环境的安装windows系统:  a.pip3ins... 查看详情

scrapy通用爬虫及反爬技巧(代码片段)

一、通用爬虫通用爬虫一般有以下通用特性:爬取大量(一般来说是无限)的网站而不是特定的一些网站。不会将整个网站都爬取完毕,因为这十分不实际(或者说是不可能)完成的。相反,其会限制爬取的时间及数量。在逻辑上十分... 查看详情

gne:4行代码实现新闻类网站通用爬虫(代码片段)

GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的HTML,输出正文内容、标题、作者、发布时间、正文中的图片地址和正文所在的标签源代码。GNE在提取今日头条、网易新闻、游民星空、观察者网、凤... 查看详情

python零基础入门爬虫原理与数据抓取-通用爬虫和聚焦爬虫(代码片段)

​根据使用场景,网络爬虫可分为通用爬虫和聚焦爬虫两种.通用爬虫通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的... 查看详情

python零基础入门爬虫原理与数据抓取-通用爬虫和聚焦爬虫(代码片段)

​根据使用场景,网络爬虫可分为通用爬虫和聚焦爬虫两种.通用爬虫通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的... 查看详情

爬虫进阶数据提取-jsonpath模块(代码片段)

数据提取-jsonpath模块1.jsonpath模块的使用场景2.jsonpath模块的使用方法2.1jsonpath模块的安装2.2jsonpath模块提取数据的方法2.3jsonpath语法规则2.4jsonpath使用示例3.jsonpath练习了解jsonpath模块的使用场景掌握jsonpath模块的使用1.jsonpath模块的... 查看详情

爬虫之resquests模块的使用(代码片段)

 RequestsRequests模块Requests模块是一个用于网络访问的模块,其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能。在上一篇我们已经使用urllib模块而Requests会比urllib更加方便,可以节约我们大... 查看详情

gnev0.1正式发布:4行代码开发新闻网站通用爬虫(代码片段)

GNEv0.1正式发布:4行代码开发新闻网站通用爬虫摄影:产品经理GNE比羊肉面还香!GNE(GeneralNewsExtractor)是一个通用新闻网站正文抽取模块,输入一篇新闻网页的HTML,输出正文内容、标题、作者、发布时间、正文中的图片地址和... 查看详情

python爬虫:requests模块使用(代码片段)

requests模块使用requests模块使用流程环境安装爬虫的第一个实例:获取搜狗搜索网页的源代码requests模块python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。用于发送请求,模拟浏览... 查看详情

小5聊python3使用selenium模块实现简单爬虫系列一(代码片段)

...本期主要是聊聊,我接触到的selenium模块实现简单的爬虫效果爬虫输出标题 查看详情

python爬虫_requests模块(代码片段)

...用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。  优点:自动处理url编码    自动处理post请求参数     简化cookie和代理操作如何使用requests模块  安装: pipinstallreq... 查看详情

selenium模块的基本使用(代码片段)

...用于测试UI界面-selenium除了可以做自动化测试,还可以做爬虫;*******-selenium可以帮我们打开(驱动)浏览器,然后往目标网站发送请求,获取响应数据;-本质上是通过python代码取代人为操作浏览器;*******-selenium对比requests请求库:-seleniu... 查看详情

爬虫入门第8课:实现代理池的爬虫模块(代码片段)

...p提取网站_国内外代理_66免费代理ip2.爬虫模块的设计思路通用爬虫:通 查看详情