程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

【python爬虫】福利,手把手教你python爬取美足船袜网源码!

发布于2019-11-07 11:28     阅读(1108)     评论(0)     点赞(29)     收藏(1)


【python爬虫】福利,手把手教你python爬取美足船袜网源码!

#http://mzsock.com 美足船袜网

-- coding: UTF-8 --

import requests
import re,os
import time
from fake_useragent import UserAgent

class Mzsock():
def init(self):
self.ua=UserAgent()
self.headers={“User-Agent”:self.ua.random}

def get_categroy_url(self):
    url="http://mzsock.com"
    response=requests.get(url,headers=self.headers).text
    ul=re.findall(r'<ul id="chenxing_menu" class="cx_menu l">(.+?)</ul>',response,re.S)[0]
    categroy_urls=re.findall(r'<li id=".+?"><a href="(.+?)">.+?</a></li>',ul,re.S)[1:-1]
    return categroy_urls

def get_urllist(self,categroy_urls):
    urllist=[]
    for url in categroy_urls:
        response=requests.get(url,verify=False,headers=self.headers).text
        num=re.findall(r'</i>共找到.+?>(.+?)</em>篇帖子</span>',response,re.S)[0]
        pagenum=round(int(num)/20) #取整,四舍五入
        print(pagenum)
        for i in range(1,pagenum+1):
            pageurl=f'{url}page/{i}/'
            urllist.append(pageurl)
    return urllist

def get_contentlist(self,urllist):
    contentlist=[]
    for url in urllist:
        response = requests.get(url,headers=self.headers).text
        div=re.findall(r'<ul class="post-list cl" id="post-list">(.+?)</ul>',response,re.S)[0]
        hrefs=re.findall(r'<a class="img" href="(.+?)" title=".+?" target="_blank">',div,re.S)
        contentlist.extend(hrefs)
        print(hrefs)
    return contentlist

def get_content(self,contentlist):
    for url in contentlist:
        response = requests.get(url,headers=self.headers).text
        h1=re.findall(r'<h1>(.+?)[(](.+?)[)]</h1>',response,re.S)[0]
        title=h1[0]
        title= re.sub(r'[\|\/\<\>\:\*\?\\\"]', "_", title)  # 剔除不合法字符
        print(title)
        os.makedirs(f'mzsock/{title}/',exist_ok=True) #创建目录
        page_num = h1[1][6:-7]
        page_num = page_num.split('/')[1]
        print(page_num)
        for i in range(1,int(page_num)+1):
            content_url=f'{url[:-5]}_{i}.html'
            content_response = requests.get(content_url, headers=self.headers).text
            div=re.findall(r'<div class="picsbox picsboxcenter chenxing_pic_images">(.+?)</div>',content_response,re.S)[0]
            img_urls=re.findall(r'<img src="(.+?)"  alt=".+?" width',div,re.S)
            x=1
            for img_url in img_urls:
                img_name=f'{i}_{x}{img_url[-4:]}'
                self.bctp(f'mzsock/{title}/', img_url, img_name)
                x=x+1

def bctp(self,lj, img_url, img_name):
    print("开始下载图片!")
    try:
        r = requests.get(img_url, timeout=5, headers=self.headers)
        with open(f'{lj}/{img_name}', 'wb') as f:
            f.write(r.content)
            print(f'下载{img_name}图片成功!')
            time.sleep(1)
    except Exception as e:
        if "port=443): Read timed out" in str(e):
            time.sleep(2)
            try:
                r = requests.get(img_url, timeout=5, headers=self.headers)
                with open(f'{lj}/{img_name}', 'wb') as f:
                    f.write(r.content)
                    print(f'下载{img_name}图片成功!')
            except Exception as e:
                print(f'下载{img_name}图片失败!')
                print(f'错误代码:{e}')
                with open(f'{lj}/spider.txt', 'a+', encoding='utf-8') as f:
                    f.write(f'错误代码:{e}---下载 {img_url} 图片失败\n')
        else:
            print(f'下载{img_name}图片失败!')
            print(f'错误代码:{e}')
            with open(f'{lj}/spider.txt', 'a+', encoding='utf-8') as f:
                f.write(f'错误代码:{e}---下载 {img_url} 图片失败\n')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

if name == ‘main’:
spider=Mzsock()
categroy_urls=spider.get_categroy_url()
urllist=spider.get_urllist(categroy_urls)
contentlist=spider.get_contentlist(urllist)
spider.get_content(contentlist)

在这里插入图片描述
在这里插入图片描述



所属网站分类: 技术文章 > 博客

作者:头疼不是病

链接:https://www.pythonheidong.com/blog/article/148320/1b2c68731fdf90a11789/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

29 0
收藏该文
已收藏

评论内容:(最多支持255个字符)