首页 > 编程语言 >Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!

Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!

时间:2024-01-02 11:34:25浏览次数:102  
标签:imgs img get 爬虫 headers 源码 print 多线程 response


一个比较简单国外设计站点,作品信息采集爬虫源码,比较简单,采集的内容包括标题、内容及图片信息,适合新人学习参考使用。

Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!_html

网站作品信息采集中,关于图片的采集下载使用了重试以及多线程的方式爬取采集下载,适合 Python 爬虫新人练手使用和学习,如果你正在找练手网站,不妨尝试爬取下载数据。

Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!_Windows_02

三次重试

考虑到外网及数据完整性,这里采用了三次重试的机制,请求访问,确保访问不会因超时而缺少请求数据。

# 3次重试
def get_resp(url):
    i = 0
    while i < 4:
        try:
            headers = {
                "User-Agent":get_ua()
            }
            response = requests.get(url, headers=headers, timeout=10)
            print(response.status_code)
            return response
        except requests.exceptions.RequestException:
            i += 1
            print(f">> 获取网页出错,6S后将重试获取第:{i} 次")
            time.sleep(i * 2)
多线程下载图片

简单的应用了多线程下载图片,代码拿来即可用,非常简单而且好用。

def down_imgs(path,imgs):
    threadings = []
    for img in imgs:
        t = threading.Thread(target=get_img, args=(path,img))
        threadings.append(t)
        t.start()

    for x in threadings:
        x.join()

    print(f"恭喜,多线程下载图片完成!")

附上完整源码仅供参考学习:

# -*- coding: UTF-8 -*-
# bmwgroupdesignworks @公众号:eryeji
# https://www.bmwgroupdesignworks.com/work/

import requests
from lxml import etree
import time
import random
import re
import threading
import os



def get_ua():
    ua_list = [
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36Chrome 17.0',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0Firefox 4.0.1',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
        'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
    ]
    ua=random.choice(ua_list)
    return ua


def get_hrefs():
    url='https://www.bmwgroupdesignworks.com/work/'
    headers={
        "User-Agent":get_ua()
    }
    response=requests.get(url=url,headers=headers,timeout=6)
    print(response.status_code)
    html=response.content.decode('utf-8')
    print(html)
    tree=etree.HTML(html)
    hrefs=tree.xpath('//article[@class="project-item"]/a/@href')
    print(len(hrefs))
    print(hrefs)
    for href in hrefs:
        get_detail(href)
        time.sleep(3)




def get_detail(href):
    headers = {
        "User-Agent": get_ua()
    }
    response = requests.get(url=href, headers=headers, timeout=6)
    print(response.status_code)
    html = response.content.decode('utf-8')
    #print(html)
    tree = etree.HTML(html)
    h1s=tree.xpath('//h1//text()')
    h1=' '.join(h1s)
    pattern = r"[\/\\\:\*\?\"\<\>\|]"
    h1=re.sub(pattern, "_", h1)  # 替换为下划线
    print(h1)
    path = f'{h1}/'
    os.makedirs(path, exist_ok=True)
    print(f">> 生成保存目录 {h1} 文件夹成功!")
    ptexts=tree.xpath('//section[@class="dw-text-small"]//text()')
    ptext='\n'.join(ptexts)
    print(ptext)
    with open(f'{path}{h1}.txt','w',encoding='utf-8') as f:
        f.write(f'{h1}\n{ptext}')
    print(f">> 保存 {h1}.txt 文件成功!")
    imgs=tree.xpath('//main[@role="main"]//img/@src')
    print(len(imgs))
    print(imgs)
    down_imgs(path, imgs)





# 3次重试
def get_resp(url):
    i = 0
    while i < 4:
        try:
            headers = {
                "User-Agent":get_ua()
            }
            response = requests.get(url, headers=headers, timeout=10)
            print(response.status_code)
            return response
        except requests.exceptions.RequestException:
            i += 1
            print(f">> 获取网页出错,6S后将重试获取第:{i} 次")
            time.sleep(i * 2)



def down_imgs(path,imgs):
    threadings = []
    for img in imgs:
        t = threading.Thread(target=get_img, args=(path,img))
        threadings.append(t)
        t.start()

    for x in threadings:
        x.join()

    print(f"恭喜,多线程下载图片完成!")


#下载图片
def get_img(path,img_url):
    img_name = img_url.split('/')[-1]
    r = get_resp(img_url)
    time.sleep(1)
    with open(f'{path}{img_name}', 'wb')as f:
        f.write(r.content)
    print(f">> {img_name}下载图片成功")


def main():
    get_hrefs()




if __name__=='__main__':
    main()

·················END·················

你好,我是二大爷,

革命老区外出进城务工人员,

互联网非早期非专业站长,

喜好python,写作,阅读,英语

不入流程序,自媒体,seo . . .


Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!_html_03

Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!_html_04

关注我的都变秃了

说错了,都变强了!

不信你试试

Bmwgroupdesignworks爬虫,网站作品信息多线程采集爬虫源码!_Windows_05

扫码关注最新动态

公众号ID:eryeji

标签:imgs,img,get,爬虫,headers,源码,print,多线程,response
From: https://blog.51cto.com/u_15200177/9065842

相关文章

  • 【练习】爬虫-基础2 - GlidedSky 源码参考!
    前面本渣渣分享过爬虫-基础1-GlidedSky,这篇就来分享爬虫-基础2,希望对你有帮助吧,当然仅记录分享,为了更有帮助,这里升级了一下爬虫难度,采用了多线程。本身相对于基础1,基础2提升了一下难度,从单页爬取提升到分页爬取,分成了1000个页面,需要请求一千次,而网页结构没有变化,很典型的Boo......
  • 【JDK源码】String源码学习笔记
    代码运行环境:JDK8首先思考几个问题:String对象在不同的JDK中是如何实现的?String对象的不可变性是什么样的?下面这段代码的输出结果是什么?Strings1=newString("aaa")+newString("");s1.intern();Strings2="aaa";System.out.println(s1==s2);Strings3=newString("bbb......
  • 【JDK源码】Java中LinkedList的实现
    JDK版本:1.8.0_271基础介绍LinkedList底层数据结构是一个双向链表:链表的每个节点叫做Node,在Node中,prev属性表示前一个节点的位置,next属性表示后一个节点的位置first是双向链表的头节点,它的前一个节点是nulllast是双向链表的尾节点,它的后一个节点是null当链表中没有数据时,fi......
  • 【JDK源码】Java包装类的缓存是怎么回事
    JDK版本:1.8.0_271基础介绍缓存机制包装类是对Java中基本类型的封装,在JDK5中引入了包装类的缓存机制,有助于节省内存。实现方式是在类初始化的时,提前创建好会频繁使用的包装类对象,当需要使用某个类的包装类对象时,如果该对象包装的值在缓存的范围内,就返回缓存的对象,否则就创建新的......
  • 【JDK源码】ArrayList的代码实现
    JDK版本:1.8.0_271基础介绍ArrayList底层数据结构就是一个数组:index表示数组下标,从0开始计数,elementDatda表示数组本身DEFAULT_CAPACITY表示数组的初始化大小,默认是10size表示数组的大小,int类型,没有使用volatile修饰,非线程安全modCount统计当前数组被修改的版本次数,数......
  • 使用Selenium库的C#爬虫程序来爬取腾讯云的视频
    这是一个使用Selenium库的C#爬虫程序,用于爬取https://cloud.tencent.com/的视频。代码中使用了代理服务器,代理服务器的主机地址为www.duoip.cn,端口号为8000。以下是完整的代码解释://导入Selenium库usingOpenQA.Selenium;//创建一个ChromeDriver实例,使用代理服务器IWebDriver......
  • Java超高精度无线定位技术--UWB (超宽带)人员定位系统源码
    UWB室内定位技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据,从而具有GHz量级的带宽。UWB(超宽带)高精度定位系统是一种利用超宽带技术实现精确定位的解决方案。该系统使用高......
  • java中小微医疗机构云服务(云HIS)平台源码
    云HIS(Cloud-BasedHealthcareInformationSystem)重新定义了HIS,目标是为中小型医疗卫生机构提供优质经济的医疗卫生信息化产品及服务;是以健康档案为主线、以电子病历为核心、以云计算技术为基础的医疗卫生系统。云HIS作为基于云计算的B/S构架的HIS系统,为基层医疗机构(包括诊所、社区......
  • Linux内核bind系统调用源码分析
    一、环境说明内核版本:Linux3.10内核源码地址:https://elixir.bootlin.com/linux/v3.10/source(包含各个版本内核源码,且网页可全局搜索函数)二、应用层-bind()函数将socket套接字绑定指定的地址:/**sockfd:由socket函数返回的套接口描述符*sockaddr:一个指向特定于协议......
  • 【B/S架构】医院不良事件报告系统源码
    医院不良事件报告系统为医院内质量控制、患者安全关注、医疗安全不良事件方面的精细化的管理提供了平台,是等级医院评审的必备内容,评审要求医院直报系统要与卫生部“医疗安全(不良)事件报告系统”建立网络对接。不良事件报告系统源码包括护理相关事件、医疗相关事件、药件相关事件......