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