Skip to content

Python爬虫

要求

必须遵守一些规则

  1. 不要爬取公民隐私数据,
  2. 不要爬取受著作权保护的内容,
  3. 不要爬取国家事务、国防建设、尖端科学技术领域的计算机系统等

必须是一只温和善良的虫

  1. 它的请求数量和频率不能过高,否则可能无异于DDoS攻击

    DDoS攻击就是通过给服务器发送海量高频的请求,让网站资源被耗尽,无法服务其它正常用户

  2. 网站如果明显做出了反爬限制,比如有些内容要登录后才可查看,或是有验证码等限制机器的机制就不要去强行突破

  3. 可以通过查看网站的robots.txt文件,这个文件会指明哪些网页允许被爬取,哪些网页不允许被爬取,有些还会专门列出针对搜索引擎爬虫的许可范围

正式学习

第一步:获取网页内容

HTTP请求

image-20231014102759849

image-20231014104507174

HTTP响应

image-20231014112121164

常见的状态码和状态消息

image-20231014104741327

第二步:解析网页内容

Beautiful Soup

根据网页的标签,以及Beautiful Soup的方法进行特殊编写

第三步:储存或分析数据

可以选择通过pandas的方法

实战代码

python
import requests
from bs4 import BeautifulSoup
import pandas as pd
titles = []
stars = []
inqs = []
# 模拟浏览器
headers = {"User-Agent": "Mozilla/5.0 (windows NT 10.0; win64; x64)"}
# 对网页的页数进行遍历
for start_num in range(0,250,25):
    response = requests.get(f"http://movie.douban.com/top250?start={start_num}",headers = headers)
    # 获取html的内容
    html = response.text
    # 通过BeautifulSoup解析网页,只解析html的内容
    soup = BeautifulSoup(html,"html.parser")
    # 根据标签,获取内容
    all_title = soup.findAll("span",attrs={"class":"title"})
    all_star = soup.findAll("span",attrs={"class":"rating_num"})
    all_inq = soup.findAll("span",attrs={"class":"inq"})
    # 循环得到每一个值
    for title,star,inq in zip(all_title,all_star,all_inq):
        title_string = title.string
        star_string = star.string
        inq_string = inq.string
        if "/" not in title_string:
            # print(title_string)
            # print(star_string)
            # print(inq_string)
            titles.append(title_string)
            stars.append(star_string)
            inqs.append(inq_string)

	# 取数据,建表头	
    data = {"Title": titles, "Rating": stars,"inq":inqs}
    # 存数据
    df = pd.DataFrame(data)
    # 存为excel
    df.to_excel("movies.xlsx", index=False)

部分效果

image-20231015133426750

Released under the MIT License.