天天爱玛丽 发表于 2023-11-10 14:25:49

求教完善Python爬虫爬取图片

本帖最后由 天天爱玛丽 于 2023-11-10 14:28 编辑

如题,也是在网上找的,专门爬取169tp网图片的Python爬虫程序,目前我只做到爬取每个美女的第一页,有5张图片,实际上都有15张,初学Python,有点不会弄了,希望Python大神能帮我完善这个程序,谢谢,重点不在爬取美女图片:lol,在于学习Python,爬取美女,不枯燥,:lol
import requests
from pyquery import PyQuery as pq
from bs4 import BeautifulSoup
import os
import re
import time

headers={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
}

#下载图片的模块,目前仅能读取第一页
def Download_the_module(file, tehurl):
    count = 1
    # 进入网站下载图片
    response = requests.get(tehurl, headers=headers)
    # 解析为HTML对象,存储在soup变量中
    soup = BeautifulSoup(response.text, "html.parser")
    # 使用select方法选择class为big_img的div标签
    bigimg = soup.select('.big_img')
    # 提取图片地址列表
    srclist = re.findall(r'https.*?jpg', str(bigimg))
    # print("srclist" + str(srclist))
    for imgurl in srclist:
      print("src: " + str(imgurl))
      # 提取图片
      r = requests.get(imgurl, headers=headers)
      dir='./图片/'+file #保存目录
      # print("dir:" + dir)
      save_dir = str(dir)
      # 检测是否有image目录没有则创建
      if not os.path.exists(save_dir):
            os.makedirs(dir)
      else:
            with open(save_dir+'/%s.jpg'%count,'wb')as f:
                f.write(r.content)
                # print('已经下载了%s张'%count)
            count += 1
      #os.system('pause')

'''
def GetPageList(page_url):
    # 进入图片首页
    rp = requests.get(page_url, headers=headers)
    # 解析HTML
    soup = BeautifulSoup(rp.text, "html.parser")
    pagelist = soup.select('.dede_pages')
    #print(str(pagelist))
    page_num = re.findall(r'共.*?页', str(pagelist).encode('utf-8'))
    print("page_num:")+ page_num
'''

#爬取地址
def Climb_to_address(a, b):
    for page in range(a, b):
      URL='https://www.169tp.com/gaogensiwa/list_3_%s.html'%page
      sponse=requests.get(URL,headers=headers)
      sponse.encoding='gbk'
      encodin=sponse.text
      doc=pq(encodin)
      extract=doc('.pic').items()
      for i in extract:
            #文件名
            page_name=i.text()
            print("page name: " + page_name)
            #提取到的网站
            page_url=i.attr('href')

            #GetPageList(page_url)
            Download_the_module(page_name, page_url)

#目前一共有590页,网站的实际页数会不定期变化
a=int(input('开始页数:'))
b=int(input('结束页数:'))
Climb_to_address(a, b)

chipset009 发表于 2023-11-10 14:48:15

github上去找相关的,或者挂github上

JuncoJet 发表于 2023-11-10 14:53:27

本帖最后由 JuncoJet 于 2023-11-10 14:54 编辑

这个涉及html css选择器,标签 类 id 这些知识
还有http getpost 方法,然后cookie ua,还有proxy
先学着吧

locky_z 发表于 2023-11-10 15:22:09

不要以为学会python就会爬虫,写爬虫的时间最多是花在分析网页页面结构和里面的脚本程序,

guizi676 发表于 2023-11-10 15:44:50

本帖最后由 guizi676 于 2023-11-10 15:53 编辑

做爬虫要会解析html标签,像C#的类似这样,

天天爱玛丽 发表于 2023-11-10 16:36:06

guizi676 发表于 2023-11-10 15:44
做爬虫要会解析html标签,像C#的类似这样,

我会解析HTML标签的,遇到的问题是
<div class="dede_pages">
         <ul class="pagelist">
            <li><a>共8页: </a></li><li><a href='#'>上一页</a></li><li class="thisclass"><a href='#'>1</a></li><li><a href='53360_2.html'>2</a></li><li><a href='53360_3.html'>3</a></li><li><a href='53360_2.html'>下一页</a></li>
         </ul>
          </div>
这种多页面链接,'#'页面是 53360.html,下一页是53360_2.html,这个代码不好弄,貌似需要提取出''53360_''再拼接当前页的网址,用代码实现起来容错性是个问题,这一页的规律,到了其它页面不一定相符了.

天天爱玛丽 发表于 2023-11-10 16:52:13

这个网站不讲武德,事情是这样的,我开始爬了一些图片都是对的,后来就不对了,
解析的图片地址是正确,下载的图片都换成他网站的LOGO,从浏览器地址栏直接输图片地址打开的也会变成该网站的LOGO图片,现在网站的防爬技术越来越厉害了

guizi676 发表于 2023-11-10 16:58:55

天天爱玛丽 发表于 2023-11-10 16:36
我会解析HTML标签的,遇到的问题是

这种多页面链接,'#'页面是 53360.html,下一页是53360_2.html,这个代 ...

我这边是按以下思路做的:
        string[] sWD = sCurAdr.Split('.');        //拆分字符串
        string sBaseURL=sWD;                //基址
      sToURL = sBaseURL + "_" + nToPag.ToString() + "." +sWD;        //加页码重新组合,得到目标网页地址

guizi676 发表于 2023-11-10 17:01:58

天天爱玛丽 发表于 2023-11-10 16:52
这个网站不讲武德,事情是这样的,我开始爬了一些图片都是对的,后来就不对了,
解析的图片地址是正确,下载的 ...

很多网站都有防爬,如果时间不急的话,可以把爬的速度降下来,尽量模拟人浏览网页的操作。

JuncoJet 发表于 2023-11-10 23:06:44

天天爱玛丽 发表于 2023-11-10 16:36
我会解析HTML标签的,遇到的问题是

这种多页面链接,'#'页面是 53360.html,下一页是53360_2.html,这个代 ...

你这个先
li=select("li")
for i in li:
a=i.select("a")
if a:
    print a.get("href")

tiya 发表于 2023-11-10 23:51:17

爬虫写的好。牢饭吃的早

shmily2016 发表于 2024-1-15 09:04:41

模拟人浏览网页的行为就行了,看完一页之后,会点击下一页,然后看完再点击下一页,只要把这个递归一下,就可以把整个图集下载完成了。像这种图片网站,大多数的网页结构都是类似的,一个根,然后下面几个分类,然后每个分类里面排列一定数量的图集,然后分页,大多数这种不需要充值的网站,分页的url都是按顺序来的,只要在第一页获取一些元素,就可以直接用循环构造页面的url了。

chaseup 发表于 2024-1-15 13:01:55

论坛上真是大有人才呀!采集的都有

shmily2016 发表于 2024-1-15 15:16:20

天天爱玛丽 发表于 2023-11-10 16:36
我会解析HTML标签的,遇到的问题是

这种多页面链接,'#'页面是 53360.html,下一页是53360_2.html,这个代 ...

你只要把第一页链接最右边的反斜杠后面的去掉保存成一个单独的字符串,然后用这个新的字符串跟第几页的相对链接拼接一下,就可以直接得到下一页的连接了。然后你再用第一页里面的共几页那个数字提取出来,就可以直接用for循环获取所有页面的链接了,然后就是下载图片的问题了。
页: [1]
查看完整版本: 求教完善Python爬虫爬取图片