爬虫入门第一篇

目录

get与post请求
请求头
正则表达式应用

get与post请求

(一)get与post的区别

get方法:

所谓的get方法,便是利用程序使用HTTP协议中的GET请求方式对目标网站发起请求。
1、用来请求资源;
2、url中传输实体数据
3、传输的数据量少
简单案例:
(未断网)尝试使用requests或者是urllib用get方法向https://www.baidu.com/发出一个请求,并将其返回结果输出。

import requests
url = 'https://www.baidu.com/'
response = requests.get(url=url)
print(response)

#<Response [200]>
(断网)尝试使用requests或者是urllib用get方法向https://www.baidu.com/发出一个请求,并将其返回结果输出。

import requests
url = 'https://www.baidu.com/'
response = requests.get(url=url)
print(response)

#Failed to establish a new connection: [Errno 11001] getaddrinfo failed’

post方法:

post请求方式的使用和get方式并没有很大的区别,本质的区别在于它传递参数的方式并不像get方式一样,通过在url中拼接字段来发送给服务器,他采取了一种相较之下更为安全的操作方式,通过form表单的方式来向服务器传递查询条件。我们同样可以通过浏览器的F12开发者工具或者fiddler抓包工具来看到formdata这个字段,从中获取form表单中的字段信息,很多登录操作就是基于此。
1、用来传输实体数据(本质上更加专业)
2、在实体数据中传输数据
3、传输的数据量大

响应转状态码

爬虫入门第一篇
200:成功
302:临时转移到新的url
403:forbidden
404:not found
500:服务器内部错误

请求头

(一)什么是请求头:

以上的一个get案例,这并不是一个完整的请求,因为服务器在接收到你的程序的请求信息时,它可以明确的从Request headers中看到你是在用程序发起请求接收响应,为了完善我们的请求,可以自定义请求头信息,利用get()方法的headers参数。
我们可以从浏览器的F12开发者工具中Network下找到请求网址的headers信息,保存下来作为我们自定义参数。
详情:https://blog.csdn.net/qq_42820268/article/details/82424353

(二)如何添加请求头

edge:https://www.cnblogs.com/stuqx/p/7253321.html

正则表达式应用

豆瓣电影top250抓取名次、影片名称、年份、导演等字段

from bs4 import BeautifulSoup
import requests
import os
def get_html(web_url):  # 爬虫获取网页没啥好说的
    header = {
        "User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
    html = requests.get(url=web_url, headers=header).text#不加text返回的是response,加了返回的是字符串
    Soup = BeautifulSoup(html, "lxml")
    data = Soup.find("ol").find_all("li")  # 还是有一点要说,就是返回的信息最好只有你需要的那部分,所以这里进行了筛选
    return data
def get_info(all_move):
    f = open("F:\粤西北\路况\douban\\douban.txt", "a")
    for info in all_move:
        #    排名
        nums = info.find('em')
        num = nums.get_text()
        #    名字
        names = info.find("span")  # 名字比较简单 直接获取第一个span就是
        name = names.get_text()
        #    导演
        charactors = info.find("p")  # 这段信息中有太多非法符号你需要替换掉
        charactor = charactors.get_text().replace(" ", "").replace("\n", "")  # 使信息排列规律
        charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
            "\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")
        #    评语
        remarks = info.find_all("span", {"class": "inq"})
        if remarks:  # 这个判断是因为有的电影没有评语,你需要做判断
            remark = remarks[0].get_text().replace("\u22ef", "")
        else:
            remark = "此影片没有评价"
        print(remarks)
        # 评分
        scores = info.find_all("span", {"class": "rating_num"})
        score = scores[0].get_text()
        f.write(num + '、')
        f.write(name + "\n")
        f.write(charactor + "\n")
        f.write(remark + "\n")
        f.write(score)
        f.write("\n\n")
    f.close()  # 记得关闭文件
if __name__ == "__main__":
    if os.path.exists("F:\粤西北\路况\douban") == False:  # 两个if来判断是否文件路径存在 新建文件夹 删除文件
        os.mkdir("F:\粤西北\路况\douban")
    if os.path.exists("F:\粤西北\路况\douban\\douban.txt") == True:
        os.remove("F:\粤西北\路况\douban\\douban.txt")
    page = 0  # 初始化页数,TOP一共有250部   每页25部
    while page <= 225:
        web_url = "https://movie.douban.com/top250?start=%s&filter=" % page
        all_move = get_html(web_url)  # 返回每一页的网页
        get_info(all_move)  # 匹配对应信息存入本地
        page += 25

效果:

爬虫入门第一篇