鸿 鸿 2022-07-16 23:07 采纳率: 92.7%
浏览 40
已结题

爬取图片,内容问题, Tieba_spider() takes no arguments

import requests
from lxml import etree
import time

创建类对象

class Tieba_spider(object):
def int(self,BaiduTie,start_page,end_page):
self.base_url="http://tieba.baidu.com"
self.headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
#开始页
self.start=start_page

    self.end=end_page
    self.name=BaiduTie
    # 第一层数据解析   找到贴吧的对应链接地址
    self.first_xpath='//div[@class="t_con cleafix"]/div/div/div/a/@href'
    # 第二层数据解析   找到对应网址下所有的图片
    self.sec_xpath='//img[@class="BDE_Image"]/@src'
# 发送请求
def send_request(self,url,params={}):
    time.sleep(1)
    try:
        # 携带参数和头部请求地址
        response=requests.get(url,params=params,headers=self.headers)
        # 返回请求页面内容
        return response.content
    except Exception:
        print("程序异常")
def write_file(self,data,page):
    print(page)
    filename="TieBa"+page
    with open(filename,"wb") as f:
        f.write(data)
# 解析数据
def analysis_data(self,data,xpathstr):
    html_data=etree.HTML(data)
    # 取出所有的指定标签内容
    data_list=html_data.xapth(xpathstr)
    return data_list
# 开始调用
def start_work(self):
    for page in range(self.start,self.end+1):
        pn=(page-1)*50
        params={"kw":self.name,"pn":pn,"fr":"search"}
        # 发送第一次页面请求
        first_data=self.send_request(self.base_url+'/f?',params)
        first_data_list=self.analysis_data(first_data,self.first_xpath)
        # 将每一条的数据请求
         for link in first_data_list:
            # 拼接请求地址
            link_url=self.base_url+link
            # 请求每个href里面的页面
            secode_data=self.send_request(link_url)
            # 二次解析 去取每个帖子里面的图片  地址  请求数据
            secode_list=self.analysis_data(secode_data,self.sec_xpath)
            print(secode_list)
            for imgurl in secode_list:
            
                # 请求每个图片的内容

                img_data = self.send_request(imgurl)
                # 字符串切片 截取字符串末尾15个字符作为文件名
                page = imgurl[-15:]
                self.write_file(img_data, page)

if name=="main":
BaiduTie=input("请输入贴吧名字:")
start_page=1
end_page=1
# 实例化类
tool = Tieba_spider(BaiduTie, start_page, end_page)
# 调度方法
tool.start_work()

img

img

  • 写回答

1条回答 默认 最新

  • 亖夕 Python领域新星创作者 2022-07-17 12:27
    关注

    给出完整代码大家才好帮你解决问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月18日
  • 已采纳回答 7月18日
  • 修改了问题 7月17日
  • 创建了问题 7月16日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同