hmhml 发表于 2020-11-10 22:34

光棍节就要来了,不打算给自己爬了一堆小姐姐一起过节?

分享一个之前写的爬取小姐姐的代码
爬取网址是:http://www.zdqx.com/qingchun
代码:import requests    #导入requests库import re    #导入re库
import os    #导入os库

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'referer': 'http://www.zdqx.com/pcbz/70270.html',
    'cookie': 'Hm_lvt_303a32038183efa6d8efec90c0031b87=1581472898; Hm_lpvt_303a32038183efa6d8efec90c0031b87=1581472912'
}    #设置伪装头

def get_urls(url,num_page):    #定义一个获得urls的函数
    response = requests.get(url=url, headers=headers)    #用requests库的get函数访问网站url,并且用伪装头进行伪装,以免被反爬
    response.encoding = response.apparent_encoding    #获得的信息编码模式为网站的编码模式
    result = re.findall('<div class="listbox">(.*?)</div>', response.text, re.S)    #用正则表达式去提取<div class="listbox">   </div>中的内容
    urlsTitleList = re.findall('<a href="(.*?)" target="_blank" title="(.*?)">', str(result), re.S)   #提取标题
    pageNumList = re.findall('<em class="page_num">共(.*?)张</em>',str(result), re.S)   #提取张数
    for urlAndTitle,num in zip(urlsTitleList,pageNumList):    #依次便利
      url = 'http:'+urlAndTitle    #url前加上http用于访问网站
      title = urlAndTitle    #标题是第二个,编程中0是第一个
      num = int(num)    #将获得的页数转换为int格式
      for page in range(1,num+1):    #依次便利第一页到第总页数+1页
            if page == 1:    #如果是第一页
                newUrl = url   #新的url还是这个url
            else:    #如果不是,就需要构造
                newUrl = url.replace('.html','_%s.html'%page)#根据页数来构造新的url
            resp = requests.get(newUrl,headers=headers)   #访问构造的url获得信息
            resp.encoding = resp.apparent_encoding   #编码模式为网站编码模式
            div_main = re.findall('<div class="main_center_img" style=" min-height: 745px;">(.*?)</div>',resp.text,re.S)   #用正则表达提取信息
            url_alt = re.findall('<img src="(.*?)"', str(div_main), re.S) # 长度为3
            _url = 'http:'+url_alt    #构造网站
            imgTitle = title+str(page)    #页数
            savedata(_url,imgTitle,num_page)    #保存

def savedata(url,title,num_page):    #定义一个保存函数
    path = '小姐姐图片/第{}页'.format(num_page)    #保存路径为 小姐姐图片/第{}页
    if not os.path.exists(path):   #如果没有就自动创建
      os.makedirs(path) #多级目录
    response = requests.get(url,headers=headers)   #requests库访问
    response.encoding = response.apparent_encoding   #编码同上
    with open(path + '/' + title + '.jpg',mode="wb") as f:    #打开一个jpg文件,没有就新建
      f.write(response.content)    #保存二进制信息
    print(title+' 保存成功!')    #保存成功
    f.close()    #关闭

def download_page(num_page):   #定义下载函数
    if num_page == 1:    #如果是第一页
      url = 'http://www.zdqx.com/qingchun/index.html'   #采集网址就是该网址
    else:    #否则
      url = 'http://www.zdqx.com/qingchun/index_' + str(num_page) + '.html'    #网址后加数字
    get_urls(url, num_page)    #调用函数访问
    print('第' + str(num_page) + '页采集完毕!')

def main_run():#定义主函数
    for page in range(1, 41):   #便利1-41
      download_page(page)   #下载


if __name__ == '__main__':
    main_run()    #运行

列明 发表于 2020-11-10 22:43

希望不會被刪。網址好評!

hncs2008 发表于 2020-11-11 08:51

RS水果 发表于 2020-11-10 23:27
都知道是光棍节了    还爬图片   真人多刺激啊

说的对 真人刺激:lol

30900 发表于 2020-11-10 22:37

学习了,感谢分享!

shiwang 发表于 2020-11-10 22:40

不会用啊

qujf 发表于 2020-11-10 22:43

感谢分享,受教了

列明 发表于 2020-11-10 22:49

兄弟,我沒python,給個exe啊,好人一生孤單!呃,平安。

longyi 发表于 2020-11-10 22:51

厉害了呢!{:1_921:}

sxbjgh 发表于 2020-11-10 23:04

有点高大上!

RS水果 发表于 2020-11-10 23:27

都知道是光棍节了    还爬图片   真人多刺激啊

淡淡xin 发表于 2020-11-10 23:31

hhh,感觉还是非常有意思的吼!滴,学生卡。
页: [1] 2 3 4 5
查看完整版本: 光棍节就要来了,不打算给自己爬了一堆小姐姐一起过节?