爬虫1.1-基础知识+requests库

目录

  • 爬虫-基础知识+requests库

    • 1. 状态返回码
    • 2. URL各个字段解释
    • 2. requests库
    • 3. requests库爬虫的基本流程

爬虫-基础知识+requests库

关于html的知识,可以到w3school中进行了解学习。http://www.w3school.com.cn/html/index.asp,水平有限,这里不多提及

1. 状态返回码

标志这这一次的请求状态,成功或失败,失败原因大概是什么

200:请求正常,服务器正常返回数据。 不代表爬去到正确信息了

301:永久重定向,比如访问www.jingdong.com 会重定向到www.jd.com

302:临时重定向,比如访问一个需要登陆的网站时,因为没有登陆会重定向到登陆页面

400:请求的url在服务器上找不到。url错误

403:服务器拒绝,权限不够

500:服务器内部错误,服务器出现bug

2. URL各个字段解释

URL:scheme://host:port/path/?query-string=xxx#anchor

scheme: 代表的是访问的协议,http https ftp...

host:主机名,域名,baidu.com

port:端口号,一般浏览器默认80

path:查询路径,文件在服务器中的位置

query-string:查询字符串,例如www.baidu.com/s?wd=python

anchor:锚点,前端用于给关键词定位的

示例

https://www.baidu.com/s?ie=UTF-8&wd=python

https://baike.baidu.com/item/html标签/6999473?fr=aladdin#2

2. requests库

requests库是python中一个非常强大的网络请求库,常用来写一些小爬虫、

浏览器抓包:使用谷歌浏览器,按F12点击Network,再按F5刷新页面即可抓包查看请求头(Requst Headers)和

表单(Form Data)数据,拷贝到自己的代码中即可防止被服务器发现一个爬虫。

get请求:

import requests
response = requests.get(url, headers=headers)
print(response.content.decode(‘utf-8‘))
# 网页编码不全都是utf-8格式,也有可能是gbk,可以在浏览器中右键查看网页源代码,一般在最开头几行有标识 utf-8或则gb2313
# headers配置件下方代码块。

headers 是需要构建的请求头字典,配置见下方代码块。

网页源代码:response.content.decode(‘utf-8‘) 最好自己解码, temp.text自动解码,但可能出错

其他属性response.encoding响应头编码 response.status_code查看响应码 response.url 查看url

post请求:

import requests
data = {
    ‘username‘: ‘xxx‘,
    ‘password‘: ‘xx‘,
    ‘random‘: ‘xxxx‘,
}
headers = {
    ‘Cookie‘: "xxx",
    ‘Referer‘: ‘xx‘,
    ‘User-Agent‘: ‘xxxx‘
}
response = requests.post(url, data=data, headers=headers)

其中url应该是可以接受post请求的url

data是提交的表单,需要在浏览器中先检查好格式,然后在代码中模仿

headers是请求头,为字典形式,一般需要加入‘User-Agent‘ ‘Cookie‘ ‘Referer‘字段,这几个字段的知识百度即可,注意headers通常都是需要添加的,如果没有添加,很可能被识别为爬虫,从而被服务器拒绝访问。

代理:

proxy = {‘http‘:‘ip:port‘}
temp = requests.get(url, headers=headers, params=params, proxies=proxy) 

从参数来看似乎可以加入多个代理ip,内部有自动处理方法

会话:

s = requests.Session() 创建会话类

s.post/get (url1,xxx) 成功后会保存cookie等信息 然后再访问其他网页即可

s.get(url2)

处理HTTPS协议时,证书不被信任,直接request.get(url, verify=False)

更多实战代码,请查看其他笔记。

3. requests库爬虫的基本流程

前面提到requests库适用于小爬虫,对于整站爬取这种工作是不适宜的,原因在于url防重控制和异步问题。

3.1 爬虫框架

第一步,分析需要爬取页面的规则,例如爬取拉勾网搜索python关键词之后的全部岗位,拉勾网先给出一个职位简介列表,点击没一个简介即可进入每个职位的详情页,而我们的爬虫正是需要解析这些详情页里面的内容。根据浏览器的user-agent, cookie, referer等字段伪造请求头。

第二步,分析url变化规则,例如boss直聘网的python职位列表变化在于page=x,所以只要在代码中加入

for x in (1, max+1) ,就可以遍历所有的列表,在其中取得详情页的url,其中max为网站中给出的最大值。

https://www.zhipin.com/c101270100/?query=python&page=4

第三步,使用xpath或者正则,在列表页中提取出详情页的url并访问,利用xpath或者正则表达式提取想要的信息

第四步,将信息存储(json, csv, txt等)

3.2 一个样例代码

# 古诗文网爬虫,正则表达式提取信息

import re
import csv
import requests

# 头部
HEADERS = {
    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
    ‘Cookie‘: ‘sec_tc=AQAAAOnYGRKNjAwAc6jZqzitZLqPPmaN; Hm_lvt_04660099568f561a75456483228a9516=1543214277; ASP.NET_SessionId=q2b21uwthctq4aad0vbc5x5e; Hm_lpvt_04660099568f561a75456483228a9516=1543214320‘,
    ‘referer‘: ‘https://www.gushiwen.org/default_1.aspx‘,
}

# 处理页面信息的函数
def parse_page(url):
    global data  # data是列表,用于存储每篇古诗字典
    response = requests.get(url, headers=HEADERS)
    response_text = response.text
    # 四个正则表达式 选中大范围再缩小范围,   .*?作用是非贪婪模式 获取两个标签之间的所有内容
    titles = re.findall(r‘<div\sclass="cont">.*?<b>(.*?)</b>‘, response_text,re.DOTALL)
    dynasties = re.findall(r‘<p class="source">.*?<a.*?>(.*?)</a>‘, response_text)
    authors = re.findall(r‘<span>:</span>.*?<a.*?>(.*?)</a>‘, response_text)
    contens = re.findall(r‘<div class="contson" id=.*?>(.*?)</div>‘, response_text, re.DOTALL)
    poeminfo = {}
    for i in contens:
        contens[contens.index(i)] = re.sub(r‘<.*?>‘, "", i).strip()  # .strip()函数用于去除\n 空格等

    # zip函数是将多个列表依次打包,[1,2] [3,4]会被组合成(1,3) (2,4)
    for value in zip(titles, dynasties, authors, contens,):
        title, dynasty, author, content = value  # 这里相当于解包并对应取值
        poeminfo = {
            ‘title‘: title,
            ‘dynasty‘: dynasty,
            ‘author‘: author,
            ‘content‘: content
        }
        data.append(poeminfo)  # 存入列表

def get_url():
    url_list = []
    base_url = ‘https://www.gushiwen.org/default_{}.aspx‘
    for i in range(1, 100):
        url = base_url.format(i)
        url_list.append(url)
    return url_list

def csv_write(data):
    # 构造头部
    csv_headers = [‘title‘, ‘dynasty‘, ‘author‘, ‘content‘]
    with open(‘gushici.csv‘, ‘w‘, encoding=‘utf-8‘, newline=‘‘) as fp:
        writer = csv.DictWriter(fp, csv_headers)
        writer.writeheader()
        writer.writerows(data)
        fp.close()

if __name__ == ‘__main__‘:
    data = []
    list = get_url()
    for url in list:
        parse_page(url)
        for i in data:
            print(i)
        print("=" * 50)
        print(url)
        print("=" * 50)
    csv_write(data) # 将获取的数据写入csv文件

原文地址:https://www.cnblogs.com/bitterzZ/p/10194852.html

时间: 2024-10-06 12:55:13

爬虫1.1-基础知识+requests库的相关文章

Python爬虫(二):Requests库

所谓爬虫就是模拟客户端发送网络请求,获取网络响应,并按照一定的规则解析获取的数据并保存的程序.要说 Python 的爬虫必然绕不过 Requests 库. 1 简介 对于 Requests 库,官方文档是这么说的: Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. 这个介绍还是比较生动形象的,便不再多说.安装使用终端命令 pi

Python爬虫:HTTP协议、Requests库

HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议对资源的操作: Requests库提供了HTTP所有的基本请求方式.官方介绍:http://www.python-requests.org/en/master Requests库的6个主要方法: Requests库的异常: Requests库的两个重要对象:Request(请求).Response(

从0开始学爬虫10之urllib和requests库与github/api的交互

urllib库的使用 # coding=utf-8 import urllib2 import urllib # htpbin模拟的环境 URL_IP="http://10.11.0.215:8080" URL_GET = "http://10.11.0.215:8080/get" def use_simple_urllib2(): response = urllib2.urlopen(URL_IP) print '>>>> Response

浅析requests库响应对象的text和content属性

在做爬虫时请求网页的requests库是必不可少的,我们常常会用到 res = resquests.get(url) 方法,在获取网页的html代码时常常使用res的text属性: html = res.text,在下载图片或文件时常常使用res的content属性: with open(filename, 'wb') as fp: fp.write(res.content) 下面我们来看看 'text' 和 'content' 的不同之处: 输出本博客的响应对象的 text import re

爬虫基础(requests库的基本使用)--02

什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作.(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库. 默认安装好python之后,是没有安

Python网络爬虫基础知识学习

对Python有一些简单了解的朋友都知识Python编程语言有个很强大的功能,那就是Python网络爬虫(http://www.maiziedu.com/course/python/645-9570/),一提到Python,就会想到相关的Python爬虫和scrapy等等,今天就来简单认识学习Python爬虫的基础知识,有了一定的相关爬虫知识,以后学习scrapy.urllib等等知识时,会相对轻松些. 爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组

Python爬虫基础知识及前期准备

学习爬虫有一小段时间了,于是决定把自己学爬虫时所学的,写过的代码以及看过的文档记录下来,权当小结.第一次写这些,如果有错误,请多指教. 首先我们需要了解一下什么是爬虫. 根据百度百科上给出的定义," 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本."简单来说,爬虫类似手动下载网页信息,比如小说.歌曲.说到这,或许会有疑问,既然这样,干嘛还去敲代码,直接人工处理不好吗?话是这么说,但如果下载的

Python3分布式爬虫(scrap+redis)基础知识和实战详解

背景 随着业务需求的变化,大规模爬虫遇到各种问题.python爬虫具有先天优势,社区资源比较齐全,各种框架也完美支持.爬虫性能也得到极大提升.本次分享从基础知识入手,涉及python 的两大爬虫框架pyspider.scrapy,并基于scrapy.scrapy-redis 做了分布式爬虫的介绍(直接粘贴的ppt截图)会涉及 redis.mongodb等相关知识. 一.前沿 1.1 爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.

[爬虫] requests库

requests库的7个常用方法 requests.request() 构造一个请求,支撑以下各种方法的基础方法 requests.get() 获取HTML网页的主要方法,对应于HTTP的GET requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT requests.patch(