一篇文章带你轻松了解并学会初级爬虫

什么是爬虫?
爬虫(又称网络爬虫、Web爬虫)是一种自动化程序,用于在互联网上自动获取数据。通俗来说,它就是一个“小机器人”,可以在万维网上自动地爬取指定网站的数据,从而进行数据处理和分析。

在进行爬虫开发时,我们需要先了解清楚相应的法规和政策,确保自己的行为符合法律的要求。同时,还需要从道德层面考虑,尊重他人的知识产权和隐私权,并保持良好的职业操守,不进行恶意采集、攻击和破坏活动。

学前必知:请勿使用所教技术违法犯罪,信息安全从我做起

区分下以下两种引库方式:

# 以下的引入方式在使用函数时就不再需要写库名了
from urllib.request import urlopen  
# 以下的引入方式在使用时需要指明库名
import urllib.request

先爬个百度首页

from urllib.request import urlopen  # 引入库

url = "http://www.baidu.com"  # 百度首页地址
resp = urlopen(url)  # 另外一种引入库的话就得是urllib.request.urlopen
content = resp.read()  # 读取网页内容
print(content)  # 输出网页源代码
resp.close()  # 关闭连接
# 如果想看看自己爬的界面 可以将得到的源代码copy到自己新建的文本文件,再更改为html尾缀查看
# 不过大概率是不能用的,毕竟你爬取的只是html文件,css和js都没有获取

但是输出结果却不是我们所想的图形界面,而是一堆的代码(即网页源代码),而我们所需要的内容就是在这些源码中
但其实运用的更多的requests库(仔细看比上面的多一个s)

区分encode()和decode()

encode()和decode()是Python中用于对字符串进行编码和解码的方法。
b = s.encode(‘utf-8’)
s = b.decode(‘utf-8’)

requests库

# 下载地址: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
import requests

url = 'https://www.csdn.net/'
resp = requests.get(url)
print(resp.text)  # 文本形式输出 拿到页面源代码

如果出现编码不匹配情况,请前往setting-Editor-File Encodings里面设置为对应的编码方式

调用百度接口
小案例如下:

import requests  # 在pip install requests

query = input("please input someone:")

url = f'https://www.baidu.com/s?ie=UTF-8&wd={query}'

dic = {  # 请求头信息 作用就是欺骗服务器让其认为本程序是一个人而非一个程序
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36"
}
resp = requests.get(url, headers=dic)

print(resp.url)
resp.close()

“User-Agent”的值:打开你自己的浏览器,随便打开一个页面,F12-(右上角Network)-在下面的Headers中寻找(一般在最下面),找到User-Agent后copy就行了

运行结果(在提示下输入周星驰)
在这里插入图片描述
咱再试试去
比如说这个url:(前往copy使用)
豆瓣电影信息获取

import requests

url = " https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20"

# 爬虫如果没有效果,那么就是被反爬了
headers ={
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36"
}

resp = requests.get(url=url, headers=headers)

print(resp.json())

resp.close()  # 需要关闭

那么肯定要问了,我这url哪来的?直接按下面说的操作就行!
F12->Network->重新加载->Fetch/XHR->Preview
说起来似乎很简单,但实际时也很简单,可以拿北京新发地试试手,比较简单(毕竟人家不做反爬)

但你爬别人网站时,别人一般都是不爽的,万一它后台一看,ip一封,你就G了,那么代理就显的如此重要了
简单说就是更换自己的ip地址

#  一般很少用 原理 通过第三方的机器去发送请求
import requests

# 36.137.208.16:7777
proxies = {
    "http": "36.137.208.16:7777"  # 看你需要访问的网站是需要http还是https 比如下面那个百度的
    # "https":
}

resp = requests.get("https://www.baidu.com", proxies=proxies)
resp.encoding = "utf-8"
print(resp.text)

有些网站怎么判断你是否为程序呢?比如其中一种就是判断您单位时间内访问了几次本网站,访问过多的话肯定就不是人能操作的出来的了,前面的User-Agent就是请求头文件,看看你是不是通过浏览器访问的等一些协议之类的信息,现在的网站基本都配备了这层防护,所以配置User-Agent很有必要

下面不妨再拿豆瓣开开刀
先使用网页端访问一下豆瓣top250
滑动到最下面(默认肯定是从第一页开始的,那么我们先访问一下第二页看看)
在这里插入图片描述
此时我们可以很明显的发现url变成了

https://movie.douban.com/top250?start=25&filter=

再看看第三页

https://movie.douban.com/top250?start=50&filter=

发现端倪了,start=后面的数据在变化,且每一页递增25,正好对应每一页有25个电影
于是乎便可开始代码的编写

import requests
import re
import csv

for str1 in range(0, 226, 25):
    str2 = str(str1)
    url = "https://movie.douban.com/top250?start="+str2+"&filter="
    headers = {
        "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36"
    }
    res = requests.get(url, headers=headers)
    page_content = res.text
    obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp;.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
                     r'.*?<span>(?P<people>.*?)人评价</span>', re.S)
    result = obj.finditer(page_content)
    # a为追加,w会清空原来的再写入
    f = open("data.csv", mode="a", encoding='utf-8')
    csvwriter = csv.writer(f)
    for it in result:
        dic = it.groupdict()
        dic['year'] = dic['year'].strip()
        csvwriter.writerow(dic.values())

    f.close()

运行了便可以得到一个data.csv文件,里面记载了top250的电影名、年份和点赞数
当然这里面设计的还有很多知识点没有讲到,如果文章反响还行的话,将会继续更新更加完善的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值