前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现简单的网络爬虫,仅限无反扒的网站

python实现简单的网络爬虫,仅限无反扒的网站

原创
作者头像
菜菜有点菜
修改2024-06-07 23:18:47
1380
修改2024-06-07 23:18:47
举报
文章被收录于专栏:白菜博客白菜博客

避免浪费时间大佬掠过,小白入门精细分解

环境准备:

pc安装python-3.7.3(64位操作系统).exe,使其电脑具备编译python代码的环境。

安装方法:双击软件包,直接下一步下一步,注意需要勾选一下pip与默认自动配置环境变量的选项。否则需要自己手动配置。反正遇到选项就全部勾上就行了。。

验证是否安装成功:

win+r快捷键输入cmd调出dos窗口

输入python -V 查看版本

学习爬虫的前置基础知识

cmd窗口下安装基本库

代码语言:python
复制
pip install requests

pip install openpyxl

pip install beautifulsoup4

# 备注:需要一条一条的去安装,,不能全部复制然后去cmd安装

所有命令都是这样输入即可安装。

pip list命令查看是否安装成功.

所有安装的库都能在这里看到。

接下来开始编写代码

代码编写工具这里用的python自带的idle

最后点击apply --> ok 应用即可

向淘宝发起get请求

代码语言:python
复制
import requests  # 导入 requests库

try:
    r = requests.get('http://www.taobao.com')     # 使用 get函数打开指定的 url
    r.raise_for_status()                  # 如果状态不是 200 ,则引发异常
    r.encoding = 'utf-8'                  # 更改编码方式
    print(r.text)                         # 用字符串的形式显示页面内容
except:
    print("网站连接失败!")            # 发生异常则输出 “" 网站连接失败! ”

目标站点前端html代码抓取:

运行代码之后 响应前端代码那么意味着。已经向淘宝服务器发起了一次get请求 ,并得到了响应

如果提示网络连接失败,那么说明requests库安装有问题。。

get请求批量爬取百度贴吧的壁纸图片

代码语言:python
复制
from contextlib import closing
import re  # 正则库
import requests  # 导入 requests库


def getHtml(url):
    # 发起网络请求获取页面内容
    page = requests.get(url)
    return page.text

def getJpg(html):
    # 使用正则表达式从html中提取图片链接
    jpgReg = re.compile(r'<img.+?src="(.+?\.jpg)" width')
    jpgs = re.findall(jpgReg, html)
    print(jpgs)
    return jpgs

def downloadJpg(imgUrl, fileName):
    # 从指定链接下载图片并保存到本地
    with closing(requests.get(imgUrl, stream=True)) as resp:
        with open(fileName, 'wb') as f:
            for chunk in resp.iter_content(128):
                f.write(chunk)

def batchDownloadJpg(imgUrls, path='./'):
    # 批量下载图片到指定路径
    count = 1
    for url in imgUrls:
        downloadJpg(url, ''.join([path, '{0}.jpg'.format(count)]))
        print("download {0} img".format(count))
        count += 1

def crawlAndDownload(url):
    # 爬取网页并下载图片
    html = getHtml(url)
    jpgs = getJpg(html)
    batchDownloadJpg(jpgs)

def main():
    url = "https://tieba.baidu.com/p/2256306796"
    crawlAndDownload(url)

if __name__ == '__main__':
    main()

目标站:

post请求爬取豆瓣影视信息并保存到excel中

代码语言:python
复制
import requests  # 导入 requests库
import openpyxl   # excel库
from bs4 import BeautifulSoup

def open_url(url):
    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'
    }
    res = requests.get(url, headers=headers)
    # print(res)
    return res

def find_movies(res):
    soup = BeautifulSoup(res.text, 'html.parser')
    # 电影名
    movies = []
    targets = soup.find_all("div", class_="hd")
    for each in targets:
        movies.append(each.a.span.text)
    # 评分
    ranks = []
    targets = soup.find_all("span", class_="rating_num")
    for each in targets:
        ranks.append(each.text)

    # 资料
    messages = []
    targets = soup.find_all("div", class_="bd")
    for each in targets:
        try:
            messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())
        except:
            continue

    result = []
    length = len(movies)
    for i in range(length):
        result.append([movies[i], ranks[i], messages[i]])
    return result


# 查找的深度
def find_depth(res):
    soup = BeautifulSoup(res.text, 'html.parser')
    depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text
    return int(depth)


def save_to_excel(result):
    wb = openpyxl.Workbook()  # 建立一个 Excel 工作簿
    ws = wb.active  # 得到一个 sheet 的页面
    ws['A1'] = '电影名称'  # 直接给单元格赋值
    ws['B1'] = '评分'
    ws['C1'] = '资料'
    for each in result:
        ws.append(each)  # 用此函数只能按行写入,从空白行开始
        wb.save('豆瓣 TOP250.xlsx')


def main():
    host = 'https://movie.douban.com/top250'
    res = open_url(host)
    depth = find_depth(res)
    result = []
    for i in range(depth):
        url = host + '/?start=' + str(25 * i)  # 寻找每页之间的关系,得出每页的 url
        res = open_url(url)
        result.extend(find_movies(res))
        save_to_excel(result)


if __name__ == '__main__':
    main()

目标站点:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备:
    • 验证是否安装成功:
    • 学习爬虫的前置基础知识
    • 接下来开始编写代码
      • 向淘宝发起get请求
      • get请求批量爬取百度贴吧的壁纸图片
      • post请求爬取豆瓣影视信息并保存到excel中
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档