xstormli 发表于 2019-4-4 09:17

爬文字和图片结合的一份作品

本帖最后由 xstormli 于 2019-4-4 13:08 编辑

从我第一次看到论坛上的爬虫也有一两个月了吧?
通过翻阅各大论坛,以及阅读相关书籍,以及请教各路大佬们,最终写出该作品。
本作品是用beautifulsoup + request来进行爬图和文字。
需要的import的包,请自行用pip install来进行安装。
想使用的童鞋一定要记得仔细阅读 # 后的标注文字!
另外你需要找一个能TextDecode的软件或者网页!
复制代码的时候可能会遇到中英文空格混乱导致invalid syntax的困扰,
请纯文本打开,Ctrl+A,Ctrl+C,Ctrl+P到你的IDE上!


# -*- coding:utf-8 -*-
# 环境 python 3.x
# 从兴趣开始学习Python
# 我是pepCoder

import time
import re
import requests
import bs4
from os import path, makedirs
from urllib.parse import urljoin

# 通过下面的def解析出的link来进行抓取图片
def Lets_get_imgs(html):
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    } # 这货是为了让你伪装成普通浏览用户,而不是爬虫人士

    response = requests.get(html, headers = headers).content# 开始爬
    soup = bs4.BeautifulSoup(response, 'html.parser')# 解析, 方法有html.parser, html5lib, lxml, 看哪一个更实用
    soup_title = soup.find(name='div',attrs={'class':'mainbox viewthread'}).find('h2').get_text()# 抓作品名称
    print('名称是:', soup_title)

    dirPath = "C:\\__作品发布__\\"# 此处设置输出文件途径,可以自行修改。
    img_folder = path.join(dirPath, soup_title)
    makedirs(img_folder, exist_ok=True)

    soup_imgs = soup.find(name='div', attrs={'class':'t_msgfont'}).find_all('img', alt="", src=re.compile(".jpg"))
    for i, img in enumerate(soup_imgs, 1):
      src = img['src']# 爬到的可能是一张图片的连接,也有可能是多张图片的连接,用enumerate函数进行一一分解保存
      img_name = path.join(img_folder, "{}.jpg".format(i))
      r = requests.get(src)
      with open(img_name, 'wb') as f:
            for chunk in r:
                f.write(chunk)
      print("文件储存为: {}".format(img_name))

# 访问分论坛页面获取帖子的连接
def acquiring_forum_links(forum, page):
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    } # 这货是为了让你伪装成普通浏览用户,而不是爬虫人士
    forum_page = 'http://www.(736973303031).com/forum/forum-'+str(forum)+'-'+str(page)+'.html'
    response = requests.get(forum_page, headers=headers).content# 爬网址下来
    soup = bs4.BeautifulSoup(response, 'lxml')# 解析, 方法有html.parser, html5lib, lxml, 看哪一个更实用
    html_raw = soup.find(name='div',attrs={'class':'mainbox threadlist'})\
      .find_all('a', style="font-weight: bold;color: blue")
    # 颜色:蓝色blue为大佬的新片,紫色purple是其他人发的,红色red是VR
    for i, link in enumerate(html_raw, 1):
      html_tail = link['href']# 爬到的是一个连接的集合体,用enumerate函数进行一一分解
      html_domain = 'http://www.(736973303031).com/forum/'# 请自行decoding(736973303031)
      html = urljoin(html_domain, html_tail)# 爬下来的信息缺少domain,需要用urljoin函数进行补充合并
      print("获取连接成功: ", html)
      Lets_get_imgs(html)

def forum_preference():
    # 230是cavalier;143是infantry;
    forum = 143
    # 请从第二页起获取,第一页目前无法正常抓取图片文件
    page = 2
    acquiring_forum_links(forum, page)

print("=☆=★=☆=★=☆= - 开始执行 - =★=☆=★=☆=★=")
time.sleep(1)
forum_preference()
time.sleep(1)
print("=☆=★=☆=★=☆= - 结束指令 - =★=☆=★=☆=★=")

# 本作品的初衷主要是懒得一页一页的看网页,乱七八糟的很闹心。
# 不如爬到硬盘里自己先看看,喜欢就去下载,不喜欢就删了图片。
# 有什么不清楚不明白的地方可以大家沟通互相学习,
# 我的codes不完美,还有很大的进步空间。
# 记得挂梯子运行此文件
# decoding帖子 ‘https://www.zhainanre.com/2021.html’

ebuy177 发表于 2019-4-4 19:50

木弄明白,咋 u出成品

唯一笑解千愁 发表于 2019-4-4 09:44

字习了....

lmx288 发表于 2019-4-4 10:41

收藏学习下

小安xiaoan 发表于 2019-4-4 14:45

学习了 谢谢大佬

xstormli 发表于 2019-4-5 10:13

能好好说话么?XD

本帖最后由 xstormli 于 2019-4-5 19:11 编辑

ebuy177 发表于 2019-4-4 19:50
木弄明白,咋 u出成品
什么是“咋 u出成品”?我不看明白!

fengwolf3 发表于 2019-4-7 22:04

什么要decoding(736973303031)解析这个?
页: [1]
查看完整版本: 爬文字和图片结合的一份作品