关于python网络爬虫多线程下载图片到本地的问题

小弟最近在做网络爬虫,已经开了三贴了哈哈哈。这次的问题是我想在下载图片到本地时进行多线程下载以提高速度,但是我写的多线程每次都会回到程序最开始处,也就是让输入爬虫网站和深度的那里,有大佬能解答下吗

import time
import re
import os
import requests
from multiprocessing.pool import Pool
from multiprocessing import cpu_count
start_time=time.time()
url_website=input('Please type the URL:')
deep_number=input("Please specify the deep you want to reach: ")
html_name='http://'
link_list=[url_website]
list=[]

def split_website(url_website):
    re_website=re.findall('//.*',url_website)
    string_website="".join(re_website)
    path_website=re.sub('//','',string_website)
    return path_website

host_name=split_website(url_website)
host_name_list=host_name.split('/')
host_name=host_name_list[0]
deep=int(deep_number)

def save_image(iter,list_split):
    iter = "http://" + list_split[0] + iter
    im_string = ''.join(iter)
    im_list = im_string.split('/')
    im_name = im_list[-1]
    print(im_name)
    exc = False
    try:
        imgs = requests.get(iter)
    except:
        exc = True
        pass
    if not exc:
        print('write')
        image_file = open(im_name, 'wb')
        image_file.write(imgs.content)
        image_file.close()

while deep>=0:
    print(deep)
    print(link_list,'before foor loop')
    for element in link_list:
        print(element)
        res=requests.get(element)
        html_process=open('html_test.html','wb')
        html_process.write(res.content)
        html_process.close()
        html_read=open('html_test.html','r',encoding='UTF-8')
        read_content=html_read.read()
        urls=re.findall("<a.*?href=.*?<\/a>",read_content)
        print(urls)
        image = re.findall('img.*?src="(.+?)"',read_content)
        print(image)
        path_website = split_website(element)
        split_list = path_website.split('/')
        os.chdir(os.path.split(os.path.realpath(__file__))[0])
        print(link_list,'before 2 foor loop')
        for i in range(len(split_list)):
            dir_name = split_list[i]
            folder_name = dir_name
            if not os.path.exists(folder_name):
                os.mkdir(folder_name)
            os.chdir(folder_name)
            if i == (len(split_list) - 1):
##                _** for im_iter in image:
##                     pool=Pool(5)
##                     pool.map(save_image,[im_iter,split_list])
##                     pool.close()_**

        print(link_list,'before 3 for loop')
        for url in urls:
            url_string="".join(url)
            url_href_list=url_string.split("\"")
            url_href_list[1]=html_name+host_name+url_href_list[1]
            nick_name = re.findall('>.*?<', url)
            if (''.join(nick_name))!='>Back<':
                list.append(url_href_list[1])
                print(list,'this is back up list')
        print(link_list,'Before removing')
        print(link_list,'After removing')
        print(list)

    link_list=list
    list=[]
    print(deep)
    deep=deep-1
end_time=time.time()
print('time used: ',end_time-start_time)

加粗斜体那是小弟写的多线程,但奇怪的是每次它都会回到最开始叫我输入网址的地方并且出现5次。如何避免这个问题只让下图片那多线程呢,求大佬解答
执行开始时
执行一段时间后

2个回答

pool map的使用参考这篇:https://blog.csdn.net/weixin_36637463/article/details/86496763

对应到你的程序,如果用save_image作为pool.map的第一个参数,那么第二个参数可以是一个url的list。相应的,save_image的参数只能是一个,类型是单个的url.

bobhuang
bobhuang 是的, 传参数的方式不对,导致运行出错。另外调用的位置也不对,for i in range (len(split_list))这个循环不需要。给了list参数之后,pool在map时会把list里每个元素分散到各个线程上,作为save_image的参数。线程池是5的情况下,会用5个线程来并行运算。
7 个月之前 回复
Curry_warrior
Curry_warrior 大佬意思是是我传入两个参数导致它失败了对吧?
7 个月之前 回复
把所有全局的代码,放在 __main__ 函数里面调用。
Curry_warrior
Curry_warrior 大佬我save_image那因为要传入两个参数一个是图像的网页链接,一个是去除了http的网页list,然后我 pool.map(save_image,[im_iter,split_list])这样写有问题吗
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python多线程爬虫withopen自动关闭

现在我的with open 是在线程中放着,可以正常运行但是会浪费很多操作。放在multi_threads()函数的开头系统,会报错:I/O无法操作已关闭的文件。 ``` class Producer(threading.Thread): def __init__(self,q_page_urls,q_infos,q_names,*args,**kwargs): super(Producer,self).__init__(*args,**kwargs) self.q_page_urls = q_page_urls self.q_infos = q_infos self.q_names = q_names def run(self) -> None: while True: time.sleep(5) url = self.q_page_urls.get() resp = requests.get(url,headers=headers) if resp.content: reasult = resp.content.decode("utf-8") soup = BeautifulSoup(reasult, 'lxml') lis = soup.find("body").find_all_next("li") for infos in lis: contents = [] author_names = [] # 爬取作者 names = infos.find("a", class_="u-user-name") if names is not None: for name in names: author_name = name.string author_names.append(author_name) self.q_names.put({"author_names":author_names}) # 爬取内容 info = infos.find("div", class_="j-r-list-c") if info is not None: for texts in info: text = texts.find("a") if text != -1: content = text.string contents.append(content) self.q_infos.put({"contents":contents}) class Consumer(threading.Thread): def __init__(self, q_infos,q_names, *args, **kwargs): super(Consumer, self).__init__(*args, **kwargs) self.q_infos = q_infos self.q_names = q_names def run(self) -> None: while True: with open("百思不得姐.csv", 'a', encoding="utf_8", newline='') as f: wrieter = csv.writer(f) info_obj = self.q_infos.get(timeout=100) name_obj = self.q_names.get(timeout=100) if name_obj.get("author_names") is not None: wrieter.writerow(name_obj.get("author_names")) if info_obj.get("contents") is not None: wrieter.writerow(info_obj.get("contents")) def multi_threads(): q_page_urls = queue.Queue(50) q_infos = queue.Queue(100) q_names = queue.Queue(100) for i in range (1,51): page_url = "http://www.budejie.com/text/%d" %i q_page_urls.put(page_url) for x in range(5): th_1 = Producer(q_page_urls,q_infos,q_names) th_1.start() for y in range(20): th_2 = Consumer(q_infos,q_names) th_2.start() if __name__ == '__main__': multi_threads() ```

python3爬虫百度图片,结果只能显示60张,后面都是重复

python初学,不太懂哪里出了问题,运行之后显示搜到1020张图片,下载后前60张没有问题,后面就都是和前面一样,仔细一看,在第60张后面的程序又显示了找到关键词,正在下载。于是只能爬60张图片,求大佬们看一下什么情况 ![图片说明](https://img-ask.csdn.net/upload/201901/07/1546856286_507280.jpg)![图片说明](https://img-ask.csdn.net/upload/201901/07/1546856296_484616.jpg) ``` #coding=utf-8 import re import requests from urllib import error from bs4 import BeautifulSoup import os num = 0 numPicture = 0 file = '' List = [] def Find(url): global List print('正在检测图片总数,请稍等.....') t = 0 i = 1 s = 0 while t < 1000: Url = url + str(t) + '&gsm=8c' try: Result = requests.get(Url, timeout=7) except BaseException: t = t+60 continue else: result = Result.text pic_url = re.findall('"objURL":"(.*?)",', result, re.S) # 先利用正则表达式找到图片url s += len(pic_url) if len(pic_url) == 0: break else: List.append(pic_url) t = t + 60 return s def recommend(url): Re = [] try: html = requests.get(url) except error.HTTPError as e: return else: html.encoding = 'utf-8' bsObj = BeautifulSoup(html.text, 'html.parser') div = bsObj.find('div', id='topRS') if div is not None: listA = div.findAll('a') for i in listA: if i is not None: Re.append(i.get_text()) return Re def dowmloadPicture(html, keyword): global num pic_url = re.findall('"objURL":"(.*?)",', html, re.S) # 先利用正则表达式找到图片url print('找到关键词:' + keyword + '的图片,即将开始下载图片...') for each in pic_url: print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each)) try: if each is not None: pic = requests.get(each, timeout=10) else: continue except BaseException: print('错误,当前图片无法下载') continue else: string = file + r'\\' + keyword + '_' + str(num) + '.jpg' fp = open(string, 'wb') fp.write(pic.content) fp.close() num += 1 if num >= numPicture: return if __name__ == '__main__': # 主函数入口 word = input("请输入搜索关键词(可以是人名,地名等): ") url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+word+'&ct=201326592&v=flip' tot = Find(url) Recommend = recommend(url) # 记录相关推荐 print('经过检测%s类图片共有%d张' % (word, tot)) numPicture = int(input('请输入想要下载的图片数量 ')) file = input('请建立一个存储图片的文件夹,输入文件夹名称即可') y = os.path.exists(file) if y == 1: print('该文件已存在,请重新输入') file = input('请建立一个存储图片的文件夹,输入文件夹名称即可') os.mkdir(file) else: os.mkdir(file) t = 0 while t < numPicture: try: url = url + str(t) + '&gsm=8c' result = requests.get(url, timeout=10) except error.HTTPError as e: print('网络错误,请调整网络后重试') else: dowmloadPicture(result.text, word) finally: t = t+60 print('当前搜索结束,感谢使用') print('猜你喜欢') for re in Recommend: print(re, end=' ') ```

Python 使用多线程写入数据库,报错

#问题描述,定义了一个函数,用于数据库写入表,直接使用函数是可以运行,但我创建了一个 多线程,在多线程里面使用运行函数,然后后错 import mysql.connector from mysql.connector import errorcode import threading,time #数据库连接参数 def sqlconn(): dbconfig={'user': 'qrcodeadmin','password': 'careyes!@#','host': '119.23.8.62','port':3308,'database': 'qrcodes','raise_on_warnings': True} try: cnx = mysql.connector.connect(**dbconfig) print('数据库连接成功') except mysql.connector.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("Something is wrong with your user name or password") elif err.errno == errorcode.ER_BAD_DB_ERROR: print("Database does not exist") else: print(err.encode) return cnx def handle(): while(True): global UID,ID for i in range(50): print(i) sqlinsert="INSERT INTO qrcode (URL,QrID) VALUES (%s,%s)",(UID,ID) cur.execute(sqlinsert[0],sqlinsert[1]) cur.execute(sqlinsert[0],sqlinsert[1]) dbcon.commit() if __name__=='__main__': global cur dbcon=sqlconn() cur=dbcon.cursor() UID=' MjAxNzEwMTExMjQyNDQ' ID='201710111242420111' #直接使用handle可以运行 handle() #------------- sql_thread=threading.Thread(target=handle) #如果使用线程就会报错 sql_thread.start() dbcon.close() print(dbcon) #报错内容 Exception in thread Thread-1: Traceback (most recent call last): File "C:\Python\lib\site-packages\mysql\connector\connection.py", line 280, in _send_cmd self._socket.send( AttributeError: 'NoneType' object has no attribute 'send' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Python\lib\threading.py", line 914, in _bootstrap_inner self.run() File "C:\Python\lib\threading.py", line 862, in run self._target(*self._args, **self._kwargs) File "sqltestV0.2_Thread.py", line 34, in handle cur.execute(sqlinsert[0],sqlinsert[1]) File "C:\Python\lib\site-packages\mysql\connector\cursor.py", line 561, in exe cute self._handle_result(self._connection.cmd_query(stmt)) File "C:\Python\lib\site-packages\mysql\connector\connection.py", line 514, in cmd_query result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) File "C:\Python\lib\site-packages\mysql\connector\connection.py", line 284, in _send_cmd raise errors.OperationalError("MySQL Connection not available.") mysql.connector.errors.OperationalError: MySQL Connection not available.

python如何提高爬虫效率

任务背景是需要从一个linux服务器上下载文件,我拥有该服务器的访问权限但仅限于读。 目前的解决方法是我把所有需要下载的数据地址都保存在了本地的文件中,一行一条数据地址,通过paramiko包连接服务器然后使用多线程的方式进行爬取。每个线程启动时向其传入一个下载地址列表,因为每个线程的下载地址列表都不重复,因此不需要考虑线程之间的通信。详细代码如下: ``` # filename是存储在本地的地址列表文件,n是最大线程数 def download(filename, n): files = open(filename, 'rb').readlines() numbers = range(n) stop = len(files) / len(numbers) def thread_download(n): sftp = login() directory = files[n*stop : (n+1)*stop] for line in directory: # 该函数的功能是将服务器中的文件下载至本地,第一个参数是具体地址,第二个参数是连接句柄 download_from_server(line.strip(), sftp) threads = [] for i in numbers: threads.append(threading.Thread(target=thread_download, args=(i, ))) threads[i].start() time.sleep(0.1) # 暂停0.1s是为了防止并发数太多 for i in numbers: threads[i].join() ``` 现在有两个问题: (1)我一般把n设置为300,程序启动时下载速度很快,能够达到每分钟100多份文件,虽然也能看到一些线程崩溃,但数量不多;但是大概10分钟后程序下载速度只有20多份文件,是因为很多线程已经挂掉了嘛,还是线程之间通过同一个账户访问存在阻塞?为什么速度下降幅度这么大? (2)除了使用多台机器和提高网速外,还能考虑什么方式提高爬虫效率?

python3 怎样用threading多线程处理同一数据

怎样用threading多线程处理同一数据打印? 函数a的内容是输出1-100 想用threading方法,开5条线程同时完成1-100的输出 注意:假如线程1输出的是1,其他线程就只能输出2 不能重复输出1...以此类推 import threading lock = threading.Lock() def a(): for i in range(1,100): print (i,threading.currentThread()) for i in range(5): th=threading.Thread(target=a,args=()) th.start()

python简单爬虫正常运行遍历,没有报错,但最后csv文件为什么只保存了一条信息

import requests import json import re import csv # 获取每个电影分类链接的函数 def get_movie_type(): url='https://movie.douban.com/chart' resp=requests.get(url) result=re.findall(r'<span><a href="(/typerank\?type_name=.*?)">(.*?)</a></span>',resp.text) return result # 获取每种电影前100部: def get_movie_rank(type_url): type_url = 'https://movie.douban.com/j/chart/top_list?' + type_url[23:] + '&start=0&limit=100' resp=requests.get(type_url) return resp.text # 储存成CSV格式 数据包括:电影名,类型,国家或地区,上映日期,评分,排行 def save(movie): with open(r'C:\Users\Administrator\Desktop\python\豆瓣电影分类前100.csv', 'w', newline='', encoding='utf8') as f: csv.writer(f).writerow(['类型','电影名称','地区','上映日期','评分','排行','地址']) csv.writer(f).writerow(movie) def run(): types_url=get_movie_type() for url in types_url: movie_type_name = url[1] print('正在储存'+movie_type_name+'类型的电影') type_url = url[0] result=get_movie_rank(type_url) #json解析 result=json.loads(result) #获取所需电影信息 for massage in result: title=massage['title'] regions=massage['regions'][0] release_date=massage['release_date'] score=massage['score'] rank = massage['rank'] url = massage['url'] movie = [movie_type_name, title, regions, release_date, score, rank, url] # 储存包含电影信息 save(movie) print(movie_type_name + '的类型储存完毕!') run()

Python爬虫过程中如何保持一致的cookie

Python爬虫时与服务器的三次交互:1、提取验证码,2、登录,3、目标网页的爬虫 1、在看别人程序时,有的在登录和目标网页爬虫过程中使用cookiejar保存cookie,但这样如何保证获取的验证码与登录所需的相匹配 2、需要保证这三次的过程cookie相同么?以及如何保证? 纠结好久了,万分感谢~

pyqt5 用子线程启动爬虫后,在子线程里弹窗后提示“python 已经停止运行”死机?

![图片说明](https://img-ask.csdn.net/upload/201905/17/1558052557_655216.png) 如图所示,我在开启的子线程里启动了4个爬虫,之后写了一个弹窗,但是这个弹窗一弹出来,直接就死机了“python 已经停止运行”。 这是什么原因呢,是不是在子线程里无法对窗口进行任何操作?如果是这样的话,该如何在爬虫结启动并束后给用户弹一个窗告诉他爬虫结束了?求大佬指点!

python3多进程爬虫的每个进程停止运行但是程序没有退出?

我写了一个多进程和多线程结合的爬虫(我不知道多进程和多线程怎样结合使用)所以我先说一下**我的思路**: * 首先我爬取的是[某车之家](https://www.autohome.com.cn/)的文章 * 汽车之家有很多种车,比如奥迪,宝马,奔驰,我创建一个进程池pool, 对应每一种车创建一个进程下载它的文章 * 然后,因为每种车下面有很多篇文章,我创建一个线程池,对应每一篇文章,创建一个线程来下载文章 * 创建进程池我使用的是multiprocessing.Pool * 创建线程池使用的是concurrent.futures.ThreadPoolExecutor ## 那么现在问题来了 * 当我刚开始运行我的代码的时候,因为我创建的进程池大小是cpu_count()=8,所以打开任务管理器可以看到8个python进程正在运行 ![图片说明](https://img-ask.csdn.net/upload/201901/26/1548506446_775132.png) * **然后,当代码运行一段时间后,进程池中的8个进程全部停止运行了** ![图片说明](https://img-ask.csdn.net/upload/201901/26/1548506504_930707.png) ![图片说明](https://img-ask.csdn.net/upload/201901/26/1548506544_201575.png) ## 可以看到此时代码并没有运行完毕,而且代码运行卡在这里无论等多久都不会继续运行 * 我观察发现,这些进程在下载某辆车如本田-雅阁的所有文章后,注意是将所有文章下载完毕才会停止运行,而且不再运行 ## 我想知道进程池中的进程为什么会停止运行,而我的函数没有停止?可以确定的是我的爬虫任务并没有全部完成,仅仅完成了一小部分。进程池中的每一个进程在爬取几辆车的所有文章后停止运行,求大佬解答,不甚感激。 ## 代码如下 ``` # coding=utf-8 import requests import os import re import json import time import random import threading import multiprocessing import concurrent.futures from bs4 import BeautifulSoup def change_title(title): rstr = r"[\/\\\:\*\?\"\<\>\|]" return re.sub(rstr, "", title) USER_AGENTS = [ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)", "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)", "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0", "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20", "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52", ] http_ip = list() https_ip = list() with open(r'D:\pycharm\Spider\99mm\useful_ip.txt', 'r') as fp: lines = fp.readlines() for line in lines: ips = eval(line) if str(ips['kind']) == 'HTTP': http_ip.append(ips['proxy']) else: https_ip.append(ips['proxy']) def get_all_cars(main_url, file_path): car_dict = {} html = requests.get(main_url) soup = BeautifulSoup(html.text, "html.parser") catalog = soup.find("div", id="hotcar-1").find_all("div", class_="name") for cata in catalog[-1:]: # suv, 紧凑型车, 中型车 cata_a = cata.find("a") print(cata_a["href"]) print(cata_a.get_text()) car_url = main_url + cata_a["href"] car_html = requests.get(car_url) car_soup = BeautifulSoup(car_html.text, "html.parser") # 有4个 class_="tab-content-item" car_letter_boxes = car_soup.find("div", class_="tab-content-item").find_all("div", class_="uibox") for car_letter_box in car_letter_boxes[:]: # 车牌按字母排序 A~Z, 一个字母下有很多车牌, 对每个字母进行处理 car_brand_info = car_letter_box.find("div", class_="uibox-con rank-list rank-list-pic") if car_brand_info: car_brands = car_brand_info.find_all("dl", olr=re.compile("^.*$")) for car_brand in car_brands: # 一个车牌有很多种车型, 对每个车牌进行处理 brand_name = car_brand.find("div").find("a").get_text() print("-car brand-", brand_name) car_dict[cata_a.get_text() + "-" + brand_name] = {} car_brand_path = main_path + "\\" + cata_a.get_text() + "-" + brand_name if not os.path.exists(car_brand_path): os.mkdir(car_brand_path) # os.chdir(car_brand_path) car_name_lists = car_brand.find_all("ul", class_="rank-list-ul") for car_name_list in car_name_lists: car_name_lis = car_name_list.find_all("li", id=re.compile("^.*$")) for car_name_li in car_name_lis: car_a_tag = car_name_li.find("h4").find("a") specific_car_url = "https:" + car_a_tag["href"] car_name = car_a_tag.get_text() print("\t", car_name, "\t", specific_car_url) car_dict[cata_a.get_text() + "-" + brand_name][car_name] = specific_car_url brand_cars_path = car_brand_path + "\\" + car_name if not os.path.exists(brand_cars_path): os.mkdir(brand_cars_path) # os.chdir(brand_cars_path) # 至此, 找到了每一辆车的url, 需要从这个url中找到它对应的一系列文章 # get_each_car_articles(main_url, specific_car_url) else: continue return car_dict def get_each_car_articles(main_url, specific_car_url, file_path, headers, proxies, info): # main_url, specific_car_url, file_path, headers, proxies, info = args # 传入的是每一种车的url, 即specific_car_url article_dict = {} specific_car_html = requests.get(url=specific_car_url, headers=headers, proxies=proxies) specific_car_soup = BeautifulSoup(specific_car_html.text, "html.parser") art_temp = specific_car_soup.find("div", class_="athm-sub-nav__channel athm-js-sticky") if art_temp: art = art_temp.find_all("li") else: print(f"\t\t****article is None, url is {specific_car_url}****") return part_url = art[6].find("a")["href"] specific_car_article_url = main_url + part_url right_pos = specific_car_article_url.rfind("/") specific_car_article_url = specific_car_article_url[:right_pos + 1] specific_car_article_html = requests.get(specific_car_article_url, headers=headers, proxies=proxies) specific_car_article_soup = BeautifulSoup(specific_car_article_html.text, "html.parser") page_info = specific_car_article_soup.find("div", class_="page") page_num = 1 if page_info: pages = page_info.find_all("a", target="_self") page_num = int(pages[-2].get_text()) for i in range(1, page_num + 1): if i == 1: page_url = specific_car_article_url else: page_url = specific_car_article_url[:-4] + str(i) + specific_car_article_url[-3:] # print("\t"*2, f"正在查找第{i}页的文章\t", page_url) page_html = requests.get(page_url, headers=headers, proxies=proxies) page_soup = BeautifulSoup(page_html.text, "html.parser") articles = page_soup.find("div", class_="cont-info").find_all("li") for article in articles: each_article = article.find("h3").find("a") each_article_url = "https:" + each_article["href"] each_article_title = each_article.get_text() article_dict[each_article_title] = each_article_url os.chdir(file_path) with concurrent.futures.ThreadPoolExecutor(max_workers=8) as t_executor: for key, value in article_dict.items(): t_executor.submit(download_each_article, *(value, key,info)) # thread_list = [] # for key, value in article_dict.items(): # thread_list.append(threading.Thread(target=download_each_article, args=(value, key,info))) # [thread.start() for thread in thread_list] # [thread.join() for thread in thread_list] def download_each_article(each_article_url, each_article_title, info): headers = { "User-Agent": random.choice(USER_AGENTS), "Referer": "https://www.autohome.com.cn" } proxies = {"proxy": random.choice(http_ip)} # each_article_url, each_article_title, headers, proxies, info = args print(f"\t\t--下载文章-- {info}\t{each_article_title}\t{each_article_url}") article_html = requests.get(each_article_url, headers=headers, proxies=proxies) article_soup = BeautifulSoup(article_html.text, "html.parser") article_content = article_soup.find("div", class_="container article") if article_content: with open(f"{change_title(each_article_title)}.txt", "w+", encoding="utf-8") as f: time_span = article_content.find("div", class_="article-info").find("span", class_="time") time = time_span.get_text() time_dict = {"time": time} f.write(json.dumps(time_dict) + "\n\n") article_content_div = article_content.find("div", id="articleContent") for content in article_content_div.find_all("p"): if content.get_text().strip(): content_dict = {"content": content.get_text()} f.write(json.dumps(content_dict) + "\n") else: try: imgs = content.find_all("a") for i in imgs: img = i.find("img") img_dict = {f"<[image] {img['alt']}> ": "https:" + img["src"]} f.write(json.dumps(img_dict) + "\n") except: continue pages = article_content.find("div", class_="athm-page__num") if pages: for a in pages.find_all("a", target="_self")[1:]: next_page_url = "https://www.autohome.com.cn" + a["href"] pages_html = requests.get(next_page_url, headers=headers, proxies=proxies) pages_soup = BeautifulSoup(pages_html.text, "html.parser") pages_content_div = pages_soup.find("div", class_="container article").find("div", id="articleContent") for content in pages_content_div.find_all("p"): if content.get_text().strip(): content_dict = {"content": content.get_text()} f.write(json.dumps(content_dict) + "\n") else: try: imgs = content.find_all("a") for i in imgs: img = i.find("img") img_dict = {f"<[image] {img['alt']}> ": "https:" + img["src"]} f.write(json.dumps(img_dict) + "\n") except: continue # 下载评论 f.write("\n") article_comment_span = article_content.find("div", "article-tools").find("span", class_="comment") article_comment_url = "https:" + article_comment_span.find("a")["href"] # print(article_comment_url) basic_reply_url = "https://reply.autohome.com.cn/api/comments/show.json?count=50&" \ "page={}&id={}&appid=1&datatype=jsonp&order=0&replyid=0" html = requests.get(article_comment_url, headers=headers, proxies=proxies) html_soup = BeautifulSoup(html.text, "html.parser") article_id = re.search(r"articleid=([\d]*)#", article_comment_url).groups()[0] first_json_dict = json.loads(requests.get(basic_reply_url.format(1, article_id), headers=headers, proxies=proxies).text[1:-1]) page_num = int(first_json_dict["commentcount"]) // 50 + 1 for i in range(1, page_num + 1): json_dict = json.loads(requests.get(basic_reply_url.format(i, article_id)).text[1:-1]) comment_dicts = json_dict["commentlist"] for comment in comment_dicts: comment_dict = {} comment_dict["RMemberId"] = comment["RMemberId"] comment_dict["RMemberName"] = comment["RMemberName"] comment_dict["replydate"] = comment["replydate"] comment_dict["ReplyId"] = comment["ReplyId"] comment_dict["RObjId"] = comment["RObjId"] comment_dict["RTargetReplyId"] = comment["RTargetReplyId"] comment_dict["RTargetMemberId"] = comment["RTargetMemberId"] comment_dict["RReplyDate"] = comment["RReplyDate"] comment_dict["RContent"] = comment["RContent"] comment_dict["RFloor"] = comment["RFloor"] f.write(json.dumps(comment_dict) + "\n") print(f"**{info}-{each_article_title} completed") else: print(f"\tPicture article, passed. URL is {each_article_url}") if __name__ == '__main__': main_url = r"https://www.autohome.com.cn" main_path = r"D:\pycharm\python_work\autohome\汽车之家" start_time = time.time() proxies = {'proxy': random.choice(http_ip)} headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", "Referer": "https://www.autohome.com.cn" } car_dict = get_all_cars(main_url, main_path) # print(car_dict) # with concurrent.futures.ProcessPoolExecutor(max_workers=8) as p_executor: # for keys, values in car_dict.items(): # for key, value in values.items(): # file_path = main_path + "\\" + str(keys) + "\\" + key # info = f"-{keys}-{key}-" # p_executor.submit(get_each_car_articles, *(main_url, value, file_path, headers, proxies, info)) pool = multiprocessing.Pool() for keys, values in car_dict.items(): print(keys, values) for key, value in values.items(): print("\t", key, value) file_path = main_path + "\\" + str(keys) + "\\" + key info = f"-{keys}-{key}-" pool.apply_async(get_each_car_articles, args=(main_url, value, file_path, headers, proxies, info)) pool.close() pool.join() end_time = time.time() print("##########已完成##########") print(f"spend time {end_time-start_time}") ```

Python 并发爬取网页问题,逐一爬取没问题,并发爬取网页不完整

用python爬取内部某一个系统的页面,发现逐一爬取没问题,并发爬取网页不完整。<br><br> **方法1:request,没问题**<br> 代码就不列出来了<br><br> **方法2:grequests设置size=1时,没问题。** ``` for page_index in range(1, page_count + 1): url_query = r"http://***/SP/SlstxSearch.jsp" url_query += r"?ACTION=getPage&PAGE={}" request = grequests.post( url=url_query.format(page_index), ) request_list.append(request) response_list = grequests.map( requests=request_list, size=1 ) ``` <br><br> **方法3:grequests设置size=2时,网页开始不完整** ``` for page_index in range(1, page_count + 1): url_query = r"http://***/SP/SlstxSearch.jsp" url_query += r"?ACTION=getPage&PAGE={}" request = grequests.post( url=url_query.format(page_index), ) request_list.append(request) response_list = grequests.map( requests=request_list, size=2 ) ``` <br> **方法4:多线程+request,网页还是不完整,和方法3一样。** <br><br> **不完整的情况:**每一页都有一个表格,内部行数都10,逐一取的时候都能取下来,但是并发的状态,有时就取不到完整的10行。 在网上找资料,逐一能取到说明不是AJAX或是JS的问题吧,为什么会这样,请高手路过支招。

关于selenium多线程打开浏览器的问题

之前的方法是: semaphore = threading.BoundSemaphore(5) for url in urls: thread = threading.Thread(target=driver.get, args=(url,semaphore,)) threads.apend(thread) for t in threads: t.start() for t in threads: t.join() 后来发现,这样写的缺点是 有多少条链接 selenium就会 打开多少个浏览器,每次开启-关闭浏览器 都非常消耗资源。 现在需求是 固定打开5个浏览器(5个线程),哪个浏览器没有被占用,就接受后边的url,如果5个浏览器都被占用,则后边的url一直等,等到某个浏览器结束前一条url访问位置。 请大神指点一下,谢谢。

如何在爬虫中添加线程

在爬虫中如何添加多线程并且异步执行,需要添加线程互斥锁吗? 求添加基于下方代码的多线程爬虫,以及注意事项(知识点) 本人自学的小小白,多谢 ``` import requests import re class Dytt_pa(object): def __init__(self): self.file_dict = {} self.pagecontent = '' def get_page(self,url='https://www.dytt8.net/html/gndy/dyzz/list_23_1.html'): # 定义缺省url为xxx """获取电影列表网页源码""" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.62 Safari/537.36"} req = requests.get(url,headers=headers) req.encoding = 'GBK' self.pagecontent = req.text # 运行之后得到get_page的结果,返回新内容 def get_film_link(self): """将迅雷下载地址与电影名保存到字典中""" file_list = re.findall(r'<a href="(.*)" class="ulink">(.*)</a>',self.pagecontent) # 得到25个(半个电影link和电影名)的list for film_link,film_name in file_list: page_heard = "https://www.dytt8.net" film_link = page_heard + film_link # list中的完整的电影link self.get_page(url=film_link) # 电影详情页源码 xun_lei = re.search(r'<td style=".*" bgcolor=".*"><a href="(.*)">ftp',self.pagecontent).group(1) # 正则出迅雷下载地址 self.file_dict[film_name] = xun_lei def start(self): num = int(input("请输入你要下载几页:")) for numa in range(1,num+1): print("正在下载第%d页,请稍后"%numa) self.get_page(url='https://www.dytt8.net/html/gndy/dyzz/list_23_%d.html'%numa) self.get_film_link() print("已下载完第%d页."%numa) for a, b in self.file_dict.items(): print("%s|%s" % (a, b)) if __name__ == '__main__': woyaoxiadiany = Dytt_pa() woyaoxiadiany.start() ```

pycharm使用multiprocessing多线程时无反应。

1.看视频学习爬虫时用到了多线程,然后自己敲代码运行无反应。复制视频源代码运行也无反应 附上源代码 ``` from fake_useragent import UserAgent import requests import re from multiprocessing import Pool ua = UserAgent() headers = { 'user-agent':ua.random } def get_proxy(): return requests.get("http://127.0.0.1:5010/get/").content def delete_proxy(proxy): requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy)) def getHtml(url): # .... retry_count = 5 proxy = get_proxy() while retry_count > 0: try: html = requests.get(url,headers=headers,proxies={"http": "http://{}".format(proxy)}) # 使用代理访问 html.raise_for_status() html.encoding = 'utf-8' return html.text except : retry_count -= 1 # 出错5次, 删除代理池中代理 delete_proxy(proxy) return None def parse_html(html): pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?<img.*?data-src="(.*?)".*?<p.*?"name"><a.*?href="(.*?)">(.*?)</a>' +'.*?.*?<p class="star">(.*?)</p>.*?"releasetime">' +'(.*?)</p>.*?"integer">(.*?)</i>.*?"fraction">(\d)</i>.*?</dd>',re.S) items = re.findall(pattern,html) for item in items: yield { '排名' :item[0], '图片链接':"https://maoyan.com"+item[1], "电影链接":'https://maoyan.com'+item[2], "电影名称":item[3], "演员":item[4].strip()[3:], "上映时间":item[5], "评分": item[6]+item[6] } def main(offset): url = "https://maoyan.com/board/4?offset="+str(offset) html = getHtml(url) for item in parse_html(html): print(item) if __name__ == '__main__': pool = Pool() print(pool.map(main,[i*10 for i in range(10)])) ``` 使用的是multiprocessing 中的Pool模块 程序运行后,一直卡在这个界面。![图片说明](https://img-ask.csdn.net/upload/201904/16/1555409202_309159.png) 程序不报错不退出。使用其他方法的多线程例如 apply_async之类的也没有反应。 在任务管理器中能查看到创建的进程 ![图片说明](https://img-ask.csdn.net/upload/201904/16/1555409290_254460.png) 求大佬解答! 已经困惑很久了。

如何用Python3自动更换IP

我用Python3写了一个程序批量在一个网站上注册账号。但是当系统检测到我的IP注册了太多账号后就把我的IP加入黑名单了。想请教各位如何在Python3中实现更换IP?

python IDLE卡死问题,sublime下没事,同样的3.5解释器

![图片说明](https://img-ask.csdn.net/upload/201510/11/1444569397_255255.png) 刚开始学习python爬虫,第一个小程序,查看百度源码就遇到了问题,在IDLE中,查看非常慢而且一定卡死,而同样的代码,放到sublime中,完全没问题,零点几秒就跑完了,都是3.5 解释器路径也一样啊

python 进程莫名其妙死掉

import time while 1: # do something print 'start...' time.sleep(15) print 'end...' 竟然在sleep的时候,执行这个程序的进程莫名其妙的死掉了。有人遇到过吗? 还有一个情况,请看下面: import os while 1: get_process_id() def get_process_id(): pid = os.getpid() 竟然在执行一段时间后,pid的值,不停的在变化。这又是为什么, 但是执行的该进程号,是不变的。

python多进程中队列不空时阻塞,求解为什么?

rt,我用python的multiprocessing模块写一个多进程生产消费程序, 消费者将消息放入 queue, 生产者从queue中get。运行时发现生产者可以put进queue, 打印queue.qsize() 正常, 消费者进程打印queue.qsize()和生产者相同,但是从队列中get()的时候就阻塞了住了, 判断empty()时也显示队列为空, 这是为什么, 跪求大神指导

关于python使用DBUtils建立连接池连接数据库报错pymysql.err.OperationalError: (2014, 'Command Out of Sync')?

我的爬虫程序使用了DBUtils建立了数据库连接池,目前在windows上运行没有问题,但在centos上运行会出现如下报错,困扰了两天了,特发此贴请教下各位大佬,感激不尽 ``` Process Process-4: Traceback (most recent call last): File "/usr/lib64/python3.6/multiprocessing/process.py", line 258, in _bootstrap self.run() File "/usr/lib64/python3.6/multiprocessing/process.py", line 93, in run self._target(*self._args, **self._kwargs) File "/home/wwwroot/TikTokSpider/spider/main_spider.py", line 358, in run_spider user_spider(sec_uid) File "/home/wwwroot/TikTokSpider/spider/main_spider.py", line 54, in user_spider user_handler(user, db) File "/home/wwwroot/TikTokSpider/public/common.py", line 853, in user_handler db.insert(insert_user, nickname) File "/home/wwwroot/TikTokSpider/public/db_con.py", line 88, in insert return self.__edit(sql, log) File "/home/wwwroot/TikTokSpider/public/db_con.py", line 102, in __edit self.db.begin() File "/pyenvs/spider/lib64/python3.6/site-packages/DBUtils/SteadyDB.py", line 425, in begin begin(*args, **kwargs) File "/pyenvs/spider/lib64/python3.6/site-packages/pymysql/connections.py", line 410, in begin self._read_ok_packet() File "/pyenvs/spider/lib64/python3.6/site-packages/pymysql/connections.py", line 396, in _read_ok_packet raise err.OperationalError(2014, "Command Out of Sync") pymysql.err.OperationalError: (2014, 'Command Out of Sync') ```

求助 Python for循环中局部变量出错

就是写了一个爬虫,一直调用一个函数扣数据,其中用到for循环,运行次数少的时候,代码是没问题的,到了1000次以上,就提示我recruitInformation和companyInformation局部变量的范围有问题,就是和全局变量在函数里错当局部变量的错误一样,错误提示我忘留下了。下面是代码。 ``` def get_one_data(soup0,url0): global T,F,recruitInformation,companyInformation #扣取招聘标题title title0 = soup0.select('.inner-left > h1:nth-of-type(1)') for tt in title0: title = tt.get_text() # print(title) #扣取招聘公司company company0 = soup0.select('body > div.terminalpage.clearfix > div.terminalpage-right > div.company-box > p > a') for co in company0: company = co.get_text() # print(company) #扣取职位福利 welfare0 = soup0.select('.welfare-tab-box') for ww in welfare0: welfare = list(ww.stripped_strings) # print(welfare) #扣取招聘信息 recruitInformation0 = soup0.select('body > div.terminalpage.clearfix > div.terminalpage-left > ul') for re in recruitInformation0: recruitInformation = list(re.stripped_strings) dd="" #临时存储其中一个信息 i=0 #控制list中的个数 dao=[] #塞进整个招聘信息 m=1 #在recruitInformation的长度为17时,控制信息个数,总共8个 if(len(recruitInformation)==16): for d in recruitInformation: if i < 2: dd = dd + d i = i + 1 else: dao.append(dd) # print(dd) dd = d i = 1 dao.append(dd) # print(dao) else: for d in recruitInformation: if m==2: if i<3: dd=dd+d i=i+1 else: dao.append(dd) m=m+1 dd=d i=1 continue if i<2: dd=dd+d i=i+1 else: dao.append(dd) m=m+1 dd=d i=1 dao.append(dd) # print(dao) #扣取职位描述 positionDescribe0=soup0.select('body > div.terminalpage.clearfix > div.terminalpage-left > div.terminalpage-main.clearfix > div > div:nth-of-type(1)') for po in positionDescribe0: positionDescribe = po.get_text() # print(positionDescribe) #扣取公司基本信息 companyInformation0=soup0.select('body > div.terminalpage.clearfix > div.terminalpage-right > div.company-box > ul') for ci in companyInformation0: companyInformation = list(ci.stripped_strings) cidd = "" #临时存储其中一个信息 i = 0 #控制list中的个数 cidao = [] #塞进整个公司基本信息 for d1 in companyInformation: if i < 2: cidd = cidd + d1 i = i + 1 else: cidao.append(cidd) # print(dd) cidd = d1 i = 1 cidao.append(cidd) # print(cidao) #扣取公司简介 allData = { "url": url0, "title": title, "company": company, "welfare": welfare, "recuritInformation": dao, "positionDescribe": positionDescribe.replace(" ", ""), "companyInformation": cidao, "companyIntroduction": "none" } print("抽取数据正常") m=inputData(allData,dd) print("存取数据可进行") if m==1: T=T+1 else: F=F+1 print("成功了"+str(T)+"个,失败了"+str(F)+"个") ``` 将recruitInformation和companyInformation注明global是试试能不能解决问题,一开始只是加了recruitInformation,后来提示了companyInformation也出错。我加了companyInformation后正在跑跑看。

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

你以为这样写Java代码很6,但我看不懂

为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码。下面这一行代码(出自大牛之手)据说可以征服你的朋友,让他们觉得你写的代码很 6,来欣赏一下吧。 IntStream.range(1, 5).boxed().map(i -&gt; { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

立即提问
相关内容推荐