利用python实现查看溧阳的摄影圈_第1页
利用python实现查看溧阳的摄影圈_第2页
利用python实现查看溧阳的摄影圈_第3页
利用python实现查看溧阳的摄影圈_第4页
利用python实现查看溧阳的摄影圈_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第利用python实现查看溧阳的摄影圈目录目标站点分析溧阳摄影圈图片采集代码前言:

本篇博客继续学习BeautifulSoup,目标站点选取溧阳摄影圈,这一地方论坛。

目标站点分析

本次要采集的目标站点分页规则如下:

/thread-htm-fid-45{页码}.html

代码采用多线程threading模块+requests模块+BeautifulSoup模块编写。

采取规则依据列表页详情页:

溧阳摄影圈图片采集代码

本案例属于实操案例,先展示完整代码,然后基于注释与重点函数进行说明。

主要实现步骤如下所示:

设置日志输出级别声明一个LiYang类,其继承自threading.Thread实例化多线程对象每个线程都去获取全局资源调用html解析函数获取板块主题分割区域,主要为防止获取置顶的主题使用lxml进行解析解析出标题与数据解析图片地址保存图片

importrandom

importthreading

importlogging

frombs4importBeautifulSoup

importrequests

importlxml

logging.basicConfig(level=logging.NOTSET)#设置日志输出级别

#声明一个LiYang类,其继承自threading.Thread

classLiYangThread(threading.Thread):

def__init__(self):

threading.Thread.__init__(self)#实例化多线程对象

self._headers=self._get_headers()#随机获取ua

self._timeout=5#设置超时时间

#每个线程都去获取全局资源

defrun(self):

#whileTrue:#此处为多线程开启位置

try:

res=requests.get(url="/thread-htm-fid-451.html",headers=self._headers,

timeout=self._timeout)#测试获取第一页数据

exceptExceptionase:

logging.error(e)

ifresisnotNone:

html_text=res.text

self._format_html(html_text)#调用html解析函数

def_format_html(self,html):

#使用lxml进行解析

soup=BeautifulSoup(html,'lxml')

#获取板块主题分割区域,主要为防止获取置顶的主题

part_tr=soup.find(attrs={'class':'bbs_tr4'})

ifpart_trisnotNone:

items=part_tr.find_all_next(attrs={"name":"readlink"})#获取详情页地址

else:

items=soup.find_all(attrs={"name":"readlink"})

#解析出标题与数据

data=[(item.text,f'/{item["href"]}')foriteminitems]

#进入标题内页

forname,urlindata:

self._get_imgs(name,url)

def_get_imgs(self,name,url):

"""解析图片地址"""

try:

res=requests.get(url=url,headers=self._headers,timeout=self._timeout)

exceptExceptionase:

logging.error(e)

#图片提取逻辑

ifresisnotNone:

soup=BeautifulSoup(res.text,'lxml')

origin_div1=soup.find(attrs={'class':'tpc_content'})

origin_div2=soup.find(attrs={'class':'imgList'})

content=origin_div2iforigin_div2elseorigin_div1

ifcontentisnotNone:

imgs=content.find_all('img')

#print([img.get("src")forimginimgs])

self._save_img(name,imgs)#保存图片

def_save_img(self,name,imgs):

"""保存图片"""

forimginimgs:

url=img.get("src")

ifurl.find('http')0:

continue

#寻找父标签中的id属性

id_=img.find_parent('span').get("id")

try:

res=requests.get(url=url,headers=self._headers,timeout=self._timeout)

exceptExceptionase:

logging.error(e)

ifresisnotNone:

name=name.replace("/","_")

withopen(f'./imgs/{name}_{id_}.jpg',"wb+")asf:#注意在python运行时目录提前创建imgs文件夹

f.write(res.content)

def_get_headers(self):

uas=[

"Mozilla/5.0(compatible;Baiduspider/2.0;+/search/spider.html)",

ua=random.choice(uas)

headers={

"user-agent":ua

returnheaders

if__name__=='__main__':

my_thread=LiYangThread()

my_thread.run()

本次案例采用中,BeautifulSoup模块采用lxml解析器对HTML数据进行解析,后续多采用此解析器,在使用前注意先导入lxml模块。

数据提取部分采用soup.find()与soup.find_all()两个函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论